diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index bada5344d..43427701a 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -26,6 +26,7 @@ @import "CPAccordionView.j" @import "CPAlert.j" @import "CPAnimation.j" +@import "CPAppearance.j" @import "CPApplication.j" @import "CPArrayController.j" @import "CPBezierPath.j" @@ -106,7 +107,8 @@ @import "CPView.j" @import "CPViewAnimation.j" @import "CPViewController.j" +@import "CPVisualEffectView.j" @import "CPWebView.j" @import "CPWindow.j" @import "CPWindowController.j" -@import "CPWorkspace.j" +@import "CPWorkspace.j" \ No newline at end of file diff --git a/AppKit/CPAppearance.j b/AppKit/CPAppearance.j new file mode 100644 index 000000000..e80c20a4a --- /dev/null +++ b/AppKit/CPAppearance.j @@ -0,0 +1,162 @@ +/* + * CPAppearance.j + * AppKit + * + * Created by Antoine Mercadal. + * Copyright 2015, Cappuccino Project. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import +@import "CPTheme.j" + +CPAppearanceNameAqua = @"CPAppearanceNameAqua"; +CPAppearanceNameLightContent = @"CPAppearanceNameLightContent"; +CPAppearanceNameVibrantDark = @"CPAppearanceNameVibrantDark"; +CPAppearanceNameVibrantLight = @"CPAppearanceNameVibrantLight"; + +var _CPAppearanceCurrent = nil, + _CPAppearancesRegistry = @{}; + + +@protocol CPAppearanceCustomization + +@required +- (CPAppearance)appearance; +- (void)setAppearance:(CPAppearance)appearance; +- (CPAppearance)effectiveAppearance; +- (void)setEffectiveAppearance:(CPAppearance)appearance; + +@end + +CPThemeStateAppearanceAqua = CPThemeState("appearance-aqua"); +CPThemeStateAppearanceLightContent = CPThemeState("appearance-light-content"); +CPThemeStateAppearanceVibrantLight = CPThemeState("appearance-vibrant-light"); +CPThemeStateAppearanceVibrantDark = CPThemeState("appearance-vibrant-dark"); + + +/*! + @ingroup appkit + + A CPAppareance represents the appearance of an to a subset of UI elements. + This is a very lightweight implementation of the NSAppearance system, but + We are using it for compliance, and especially for the CPVisualEffectView +*/ +@implementation CPAppearance : CPObject +{ + BOOL _allowsVibrancy @accessors(property=allowsVibrancy); + + CPString _name; +} + + +#pragma mark - +#pragma mark Class Methods + +/*! Returns the current default CPAppearance +*/ ++ (CPAppearance)currentAppearance +{ + if (!_CPAppearanceCurrent) + _CPAppearanceCurrent = [CPAppearance appearanceNamed:CPAppearanceNameAqua]; + + return _CPAppearanceCurrent; +} + +/*! Sets the current default CPAppearance + @param appearance the new current appearance +*/ ++ (void)setCurrentAppearance:(CPAppearance)anAppearance +{ + _CPAppearanceCurrent = anAppearance; +} + +/*! Returns the CPAppearance object with the given name + @param name the name of the appearance +*/ ++ (CPAppearance)appearanceNamed:(CPString)aName +{ + if (![_CPAppearancesRegistry containsKey:aName]) + { + [_CPAppearancesRegistry setObject:[[CPAppearance alloc] initWithAppearanceNamed:aName bundle:nil] + forKey:aName]; + } + + return [_CPAppearancesRegistry objectForKey:aName]; +} + + +#pragma mark - +#pragma mark Initialization + +/*! Creates a CPAppearance object initialized to the specified appearance file in the specified bundle + This method does actually nothing special. It just creates a default appearance object +*/ +- (id)initWithAppearanceNamed:(CPString)aName bundle:(CPBundle)bundle +{ + if (self = [super init]) + { + _name = aName; + _allowsVibrancy = YES; + + if ([_CPAppearancesRegistry containsKey:aName]) + [CPException raise:CPInternalInconsistencyException reason:"Appearance with name '" + aName + "' is already declared."]; + + [_CPAppearancesRegistry setObject:self forKey:aName]; + } + + return self; +} + + +#pragma mark - +#pragma mark Implementation + +- (BOOL)isEqual:(id)anObject +{ + if (![anObject isKindOfClass:CPAppearance]) + return NO; + + return self._name == anObject._name; +} + +- (CPString)description +{ + return @""; +} + + +#pragma mark - +#pragma mark CPCoding + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super init]) + { + _name = [aCoder decodeObjectForKey:@"_name"]; + _allowsVibrancy = [aCoder decodeBoolForKey:@"_allowsVibrancy"]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_name forKey:@"_name"]; + [aCoder encodeBool:_allowsVibrancy forKey:@"_allowsVibrancy"]; +} + +@end \ No newline at end of file diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 27f0e3367..27b7d9736 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -47,6 +47,8 @@ var CPMainCibFile = @"CPMainCibFile", @protocol CPApplicationDelegate @optional +- (CPApplicationTerminateReply)applicationShouldTerminate:(CPApplication)sender; +- (CPString)applicationShouldTerminateMessage:(CPApplication)sender; - (void)applicationDidBecomeActive:(CPNotification)aNotification; - (void)applicationDidChangeScreenParameters:(CPNotification)aNotification; - (void)applicationDidFinishLaunching:(CPNotification)aNotification; @@ -58,6 +60,9 @@ var CPMainCibFile = @"CPMainCibFile", @end +var CPApplicationDelegate_applicationShouldTerminate_ = 1 << 0, + CPApplicationDelegate_applicationShouldTerminateMessage_ = 1 << 1; + /*! @ingroup appkit @class CPApplication @@ -103,6 +108,8 @@ var CPMainCibFile = @"CPMainCibFile", // id _delegate; + CPInteger _implementedDelegateMethods; + BOOL _finishedLaunching; BOOL _isActive; @@ -165,6 +172,8 @@ var CPMainCibFile = @"CPMainCibFile", if (_delegate == aDelegate) return; + _implementedDelegateMethods = 0; + var defaultCenter = [CPNotificationCenter defaultCenter], delegateNotifications = [ @@ -205,6 +214,12 @@ var CPMainCibFile = @"CPMainCibFile", if ([_delegate respondsToSelector:selector]) [defaultCenter addObserver:_delegate selector:selector name:notificationName object:self]; } + + if ([_delegate respondsToSelector:@selector(applicationShouldTerminate:)]) + _implementedDelegateMethods |= CPApplicationDelegate_applicationShouldTerminate_ + + if ([_delegate respondsToSelector:@selector(applicationShouldTerminateMessage:)]) + _implementedDelegateMethods |= CPApplicationDelegate_applicationShouldTerminateMessage_ } /*! @@ -426,12 +441,7 @@ var CPMainCibFile = @"CPMainCibFile", { // callback method for terminate: if (didCloseAll) - { - if ([_delegate respondsToSelector:@selector(applicationShouldTerminate:)]) - [self replyToApplicationShouldTerminate:[_delegate applicationShouldTerminate:self]]; - else - [self replyToApplicationShouldTerminate:YES]; - } + [self replyToApplicationShouldTerminate:[self _sendDelegateApplicationShouldTerminate]]; } - (void)replyToApplicationShouldTerminate:(BOOL)terminate @@ -445,6 +455,9 @@ var CPMainCibFile = @"CPMainCibFile", - (void)activateIgnoringOtherApps:(BOOL)shouldIgnoreOtherApps { + if (_isActive) + return; + [self _willBecomeActive]; [CPPlatform activateIgnoringOtherApps:shouldIgnoreOtherApps]; @@ -455,6 +468,9 @@ var CPMainCibFile = @"CPMainCibFile", - (void)deactivate { + if (!_isActive) + return; + [self _willResignActive]; [CPPlatform deactivate]; @@ -480,6 +496,15 @@ var CPMainCibFile = @"CPMainCibFile", - (void)run { [self finishLaunching]; + [self sendEvent:[CPEvent otherEventWithType:CPAppKitDefined + location:CGPointMakeZero() + modifierFlags:0 + timestamp:[CPEvent currentTimestamp] + windowNumber:[_keyWindow windowNumber] + context:nil + subtype:nil + data1:nil + data2:nil]]; } // Managing the Event Loop @@ -1195,6 +1220,22 @@ var CPMainCibFile = @"CPMainCibFile", userInfo:nil]; } +- (BOOL)_sendDelegateApplicationShouldTerminate +{ + if (!(_implementedDelegateMethods & CPApplicationDelegate_applicationShouldTerminate_)) + return YES; + + return [_delegate applicationShouldTerminate:self]; +} + +- (CPString)_sendDelegateApplicationShouldTerminateMessage +{ + if (!(_implementedDelegateMethods & CPApplicationDelegate_applicationShouldTerminateMessage_)) + return @"You have attempted to leave this page. Are you sure you want to exit this page?"; + + return [_delegate applicationShouldTerminateMessage:self]; +} + - (void)_didResignActive { if (self._activeMenu) diff --git a/AppKit/CPApplication_Constants.j b/AppKit/CPApplication_Constants.j index 31016bacf..685975719 100644 --- a/AppKit/CPApplication_Constants.j +++ b/AppKit/CPApplication_Constants.j @@ -31,6 +31,7 @@ CPApplicationWillResignActiveNotification = @"CPApplicationWillResignA CPApplicationDidResignActiveNotification = @"CPApplicationDidResignActiveNotification"; CPApplicationDidChangeScreenParametersNotification = @"CPApplicationDidChangeScreenParametersNotification"; +@typedef CPApplicationTerminateReply CPTerminateNow = YES; CPTerminateCancel = NO; CPTerminateLater = -1; // not currently supported diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 26c17edaa..e2b7c1074 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -665,10 +665,10 @@ CPButtonImageOffset = 3.0; */ - (void)sizeToFit { - [self setFrameSize:[self _minimumFrameSize]]; - [self layoutSubviews]; + [self setFrameSize:[self _minimumFrameSize]]; + if ([self ephemeralSubviewNamed:@"content-view"]) [self layoutSubviews]; } diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 47f869597..f27819689 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -112,6 +112,8 @@ - (void)awakeFromCib { + [super awakeFromCib]; + var view = [self superview], subview = self; diff --git a/AppKit/CPClipView.j b/AppKit/CPClipView.j index 93f8aacd6..dd8a42c65 100644 --- a/AppKit/CPClipView.j +++ b/AppKit/CPClipView.j @@ -195,7 +195,7 @@ - (CGRect)documentVisibleRect { - return [self convertRect:[self bounds] fromView:_documentView]; + return [_documentView visibleRect]; } @end diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 943c05a30..b7ff621d0 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -60,6 +60,8 @@ var CPCollectionViewDelegate_collectionView_acceptDrop_index_dropOperation_ @end +var HORIZONTAL_MARGIN = 2; + /*! @ingroup appkit @class CPCollectionView @@ -88,9 +90,6 @@ var CPCollectionViewDelegate_collectionView_acceptDrop_index_dropOperation_ @param indices the indices to obtain drag types @return an array of drag types (CPString) */ - -var HORIZONTAL_MARGIN = 2; - @implementation CPCollectionView : CPView { CPArray _content; diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index f6d094eb1..317de9d1e 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -74,7 +74,7 @@ var CPComboBoxTextSubview = @"text", BOOL _usesDataSource; CGSize _intercellSpacing; CPArray _items; - id _dataSource; + id _dataSource; CPInteger _implementedDelegateComboBoxMethods; CPString _selectedStringValue; float _itemHeight; @@ -843,7 +843,16 @@ var CPComboBoxTextSubview = @"text", // In FireFox this needs to be done in setTimeout, otherwise there is no caret // We have to save the input element now, when we lose focus it will change. var element = [self _inputElement]; - window.setTimeout(function() { element.focus(); }, 0); + window.setTimeout(function() { + + // This will prevent to jump to the focused element + var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin]; + + element.focus(); + + [self _restorePreviousScrollingOrigin:previousScrollingOrigin]; + + }, 0); #endif return NO; diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index cb7be84e3..8c7ea8958 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -42,13 +42,6 @@ @end -@typedef CPTextAlignment -CPLeftTextAlignment = 0; -CPRightTextAlignment = 1; -CPCenterTextAlignment = 2; -CPJustifiedTextAlignment = 3; -CPNaturalTextAlignment = 4; - @typedef CPControlSize CPRegularControlSize = 0; CPSmallControlSize = 1; @@ -126,6 +119,8 @@ var CPControlBlackColor = [CPColor blackColor]; CGPoint _previousTrackingLocation; CPControlSize _controlSize; + + CPWritingDirection _baseWritingDirection @accessors(property=baseWritingDirection); } + (CPDictionary)themeAttributes @@ -240,7 +235,7 @@ var CPControlBlackColor = [CPColor blackColor]; */ - (ThemeState)_controlSizeThemeState { - switch(_controlSize) + switch (_controlSize) { case CPSmallControlSize: return CPThemeStateControlSizeSmall; @@ -1016,6 +1011,49 @@ var CPControlBlackColor = [CPColor blackColor]; return [self hasThemeState:CPThemeStateHighlighted]; } + +#pragma mark - +#pragma mark Base writing direction + +/*! + Sets the initial writing direction of the receiver + @param writingDirection - It could be CPWritingDirectionNatural, CPWritingDirectionLeftToRight, CPWritingDirectionRightToLeft +*/ +- (void)setBaseWritingDirection:(CPWritingDirection)writingDirection +{ + if (writingDirection == _baseWritingDirection) + return; + + [self willChangeValueForKey:@"baseWritingDirection"]; + _baseWritingDirection = writingDirection; + [self didChangeValueForKey:@"baseWritingDirection"]; + +#if PLATFORM(DOM) + + var style; + + switch (_baseWritingDirection) + { + case CPWritingDirectionNatural: + style = "initial"; + break; + + case CPWritingDirectionLeftToRight: + style = "ltr"; + break; + + case CPWritingDirectionRightToLeft: + style = "rtl"; + break; + + default: + style = "initial"; + } + + _DOMElement.style.direction = style; +#endif +} + @end var CPControlActionKey = @"CPControlActionKey", @@ -1027,6 +1065,7 @@ var CPControlActionKey = @"CPControlActionKey", CPControlSendsActionOnEndEditingKey = @"CPControlSendsActionOnEndEditingKey", CPControlTargetKey = @"CPControlTargetKey", CPControlValueKey = @"CPControlValueKey", + CPControlBaseWrittingDirectionKey = @"CPControlBaseWrittingDirectionKey"; __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey"; @@ -1055,6 +1094,8 @@ var CPControlActionKey = @"CPControlActionKey", [self setFormatter:[aCoder decodeObjectForKey:CPControlFormatterKey]]; [self setControlSize:[aCoder decodeIntForKey:CPControlControlSizeKey]]; + + [self setBaseWritingDirection:[aCoder decodeIntForKey:CPControlBaseWrittingDirectionKey]]; } return self; @@ -1089,6 +1130,9 @@ var CPControlActionKey = @"CPControlActionKey", [aCoder encodeObject:_formatter forKey:CPControlFormatterKey]; [aCoder encodeInt:_controlSize forKey:CPControlControlSizeKey]; + + [aCoder encodeInt:_baseWritingDirection forKey:CPControlBaseWrittingDirectionKey]; + } @end diff --git a/AppKit/CPDatePicker/CPDatePicker.j b/AppKit/CPDatePicker/CPDatePicker.j index e4f92138a..123ccd749 100644 --- a/AppKit/CPDatePicker/CPDatePicker.j +++ b/AppKit/CPDatePicker/CPDatePicker.j @@ -630,14 +630,6 @@ CPEraDatePickerElementFlag = 0x0100; return [[_locale objectForKey:CPLocaleCountryCode] isEqualToString:@"US"]; } -/*! Check if we are in the english format or not. Depending on the locale -*/ -- (BOOL)_isEnglishFormat -{ - return [[_locale objectForKey:CPLocaleLanguageCode] isEqualToString:@"en"]; -} - - #pragma mark - #pragma mark Key event diff --git a/AppKit/CPDatePicker/_CPDatePickerClock.j b/AppKit/CPDatePicker/_CPDatePickerClock.j index 2c3a76f56..1dc603934 100644 --- a/AppKit/CPDatePicker/_CPDatePickerClock.j +++ b/AppKit/CPDatePicker/_CPDatePickerClock.j @@ -139,7 +139,7 @@ var RADIANS = Math.PI / 180; [_minuteHandLayer setImage:[_datePicker currentValueForThemeAttribute:@"minute-hand-image"]]; [_secondHandLayer setImage:[_datePicker currentValueForThemeAttribute:@"second-hand-image"]]; - if ([_datePicker _isEnglishFormat]) + if ([_datePicker _isAmericanFormat]) { if (dateValue.getHours() > 11) [_PMAMTextField setStringValue:@"PM"] diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 2f9b42b41..366660dad 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -198,7 +198,6 @@ var CPZeroKeyCode = 48, else [self _selectTextField:_firstTextField]; } - } /*! Select a textField @@ -277,74 +276,99 @@ var CPZeroKeyCode = 48, } } -/*! performKeyEquivalent event - Used for moving in the textField +/*! + PerformKeyEquivalent event + We need to override that to handle the tab key */ - (BOOL)performKeyEquivalent:(CPEvent)anEvent { if (![self isEnabled] || !_currentTextField || [[self window] firstResponder] != _datePicker) return NO; - var key = [anEvent charactersIgnoringModifiers]; - - if (key == CPUpArrowFunctionKey) + if ([anEvent charactersIgnoringModifiers] === CPTabCharacter) { - [_currentTextField _invalidTimer]; - [_stepper setDoubleValue:[_currentTextField intValue]]; - [_stepper performClickUp:self]; + if ([anEvent modifierFlags] & CPShiftKeyMask) + [self insertBacktab:self]; + else + [self insertTab:self]; + return YES; } - - if (key == CPDownArrowFunctionKey) + else if ([anEvent charactersIgnoringModifiers] === CPBackTabCharacter) { - [_currentTextField _invalidTimer]; - [_stepper setDoubleValue:[_currentTextField intValue]]; - [_stepper performClickDown:self]; + [self insertBacktab:self]; return YES; } - if (key == CPLeftArrowFunctionKey || [anEvent keyCode] == CPTabKeyCode && [anEvent modifierFlags] & CPShiftKeyMask) - { - if (_currentTextField == _firstTextField && [anEvent keyCode] == CPTabKeyCode) - { - var previousValidKeyView = [_datePicker previousValidKeyView]; - - if (previousValidKeyView) - [[self window] makeFirstResponder:previousValidKeyView]; - - return YES; - } - - [self _selectTextField:[_currentTextField previousTextField]]; - return YES; - } - - if (key == CPRightArrowFunctionKey || [anEvent keyCode] == CPTabKeyCode) - { - if (_currentTextField == _lastTextField && [anEvent keyCode] == CPTabKeyCode) - { - var nextValidKeyView = [_datePicker nextValidKeyView]; - - if (nextValidKeyView) - [[self window] makeFirstResponder:nextValidKeyView]; - - return YES; - } - - [self _selectTextField:[_currentTextField nextTextField]]; - return YES; - } - - if ([anEvent keyCode] == CPReturnKeyCode) - { - [_currentTextField _endEditing]; - - return [super performKeyEquivalent:anEvent]; - } - return [super performKeyEquivalent:anEvent]; } +- (void)insertTab:(id)sender +{ + if (!_currentTextField) + return; + + if (_currentTextField == _lastTextField) + [[self window] selectNextKeyView:self]; + else + [self moveRight:sender]; +} + +- (void)moveRight:(id)sender +{ + if (!_currentTextField) + return; + + [self _selectTextField:[_currentTextField nextTextField]]; +} + +- (void)insertBacktab:(id)sender +{ + if (!_currentTextField) + return; + + if (_currentTextField == _firstTextField) + [[self window] selectPreviousKeyView:self]; + else + [self moveLeft:sender]; +} + +- (void)moveLeft:(id)sender +{ + if (!_currentTextField) + return; + + [self _selectTextField:[_currentTextField previousTextField]]; +} + +- (void)moveDown:(id)sender +{ + if (!_currentTextField) + return; + + [_currentTextField _invalidTimer]; + [_stepper setDoubleValue:[_currentTextField intValue]]; + [_stepper performClickDown:self]; +} + +- (void)moveUp:(id)sender +{ + if (!_currentTextField) + return; + + [_currentTextField _invalidTimer]; + [_stepper setDoubleValue:[_currentTextField intValue]]; + [_stepper performClickUp:self]; +} + +- (void)insertNewline:(id)sender +{ + if (!_currentTextField) + return; + + [_currentTextField _endEditing]; +} + /*! KeyDown event We just care care about the event A/P and every numbers */ @@ -353,7 +377,9 @@ var CPZeroKeyCode = 48, if (![self isEnabled]) return; - if ([_datePicker _isEnglishFormat] && [_currentTextField dateType] == CPAMPMDateType && ([anEvent keyCode] == CPAKeyCode || [anEvent keyCode] == CPPKeyCode || [anEvent keyCode] == CPMajAKeyCode || [anEvent keyCode] == CPMajPKeyCode)) + [self interpretKeyEvents:[anEvent]]; + + if ([_datePicker _isAmericanFormat] && [_currentTextField dateType] == CPAMPMDateType && ([anEvent keyCode] == CPAKeyCode || [anEvent keyCode] == CPPKeyCode || [anEvent keyCode] == CPMajAKeyCode || [anEvent keyCode] == CPMajPKeyCode)) { if ([anEvent keyCode] == CPAKeyCode || [anEvent keyCode] == CPMajAKeyCode) [_currentTextField setStringValue:@"AM"]; @@ -368,6 +394,7 @@ var CPZeroKeyCode = 48, [_currentTextField setValueForKeyEvent:anEvent]; } + #pragma mark - #pragma mark Layout methods @@ -725,7 +752,7 @@ var CPZeroKeyCode = 48, if (hour != currentHour) { - if (([_datePicker _isEnglishFormat] || [_datePicker _isAmericanFormat])) + if ([_datePicker _isAmericanFormat]) { if (![self _isAMHour]) { @@ -1050,7 +1077,7 @@ var CPZeroKeyCode = 48, - (void)_updateHiddenTextFields { var datePickerElements = [_datePicker datePickerElements], - isEnglishFormat = [_datePicker _isEnglishFormat]; + isAmericanFormat = [_datePicker _isAmericanFormat]; if (datePickerElements & CPYearMonthDatePickerElementFlag) { @@ -1083,7 +1110,7 @@ var CPZeroKeyCode = 48, [_textFieldSeparatorThree setHidden:NO]; [_textFieldSeparatorFour setHidden:YES]; - if (isEnglishFormat) + if (isAmericanFormat) [_textFieldPMAM setHidden:NO]; else [_textFieldPMAM setHidden:YES]; @@ -1115,9 +1142,9 @@ var CPZeroKeyCode = 48, verticalInset = contentInset.top - contentInset.bottom, firstTexField = _textFieldMonth, secondTextField = _textFieldDay, - isEnglishFormat = [_datePicker _isEnglishFormat]; + isAmericanFormat = [_datePicker _isAmericanFormat]; - if (!isEnglishFormat) + if (!isAmericanFormat) { firstTexField = _textFieldDay; secondTextField = _textFieldMonth; @@ -1131,7 +1158,7 @@ var CPZeroKeyCode = 48, else [secondTextField setFrameOrigin:CGPointMake(CGRectGetMaxX([_textFieldSeparatorOne frame]) + separatorContentInset.right, verticalInset)]; - if (isEnglishFormat && [secondTextField isHidden]) + if (isAmericanFormat && [secondTextField isHidden]) [_textFieldSeparatorTwo setFrameOrigin:CGPointMake(CGRectGetMaxX([firstTexField frame]) + separatorContentInset.left, verticalInset)]; else [_textFieldSeparatorTwo setFrameOrigin:CGPointMake(CGRectGetMaxX([secondTextField frame]) + separatorContentInset.left, verticalInset)]; @@ -1206,7 +1233,7 @@ var CPZeroKeyCode = 48, { var datePickerElements = [_datePicker datePickerElements]; - if ([_datePicker _isEnglishFormat]) + if ([_datePicker _isAmericanFormat]) { if (datePickerElements & CPYearMonthDayDatePickerElementFlag || datePickerElements & CPYearMonthDatePickerElementFlag) [[self superview] setFirstTextField:_textFieldMonth]; @@ -1249,9 +1276,9 @@ var CPZeroKeyCode = 48, var datePickerElements = [_datePicker datePickerElements], firstTexField = _textFieldMonth, secondTextField = _textFieldDay, - isEnglishFormat = [_datePicker _isEnglishFormat]; + isAmericanFormat = [_datePicker _isAmericanFormat]; - if (!isEnglishFormat) + if (!isAmericanFormat) { firstTexField = _textFieldDay; secondTextField = _textFieldMonth; @@ -1266,7 +1293,7 @@ var CPZeroKeyCode = 48, if (datePickerElements & CPHourMinuteSecondDatePickerElementFlag || datePickerElements & CPHourMinuteDatePickerElementFlag) [_textFieldYear setNextTextField:_textFieldHour]; - else if (isEnglishFormat || (datePickerElements & CPYearMonthDayDatePickerElementFlag) == CPYearMonthDayDatePickerElementFlag) + else if (isAmericanFormat || (datePickerElements & CPYearMonthDayDatePickerElementFlag) == CPYearMonthDayDatePickerElementFlag) [_textFieldYear setNextTextField:firstTexField]; else [_textFieldYear setNextTextField:secondTextField]; @@ -1275,7 +1302,7 @@ var CPZeroKeyCode = 48, if ((datePickerElements & CPHourMinuteSecondDatePickerElementFlag) == CPHourMinuteSecondDatePickerElementFlag) [_textFieldMinute setNextTextField:_textFieldSecond]; - else if (isEnglishFormat) + else if (isAmericanFormat) [_textFieldMinute setNextTextField:_textFieldPMAM]; else if ((datePickerElements & CPYearMonthDayDatePickerElementFlag) == CPYearMonthDayDatePickerElementFlag) [_textFieldMinute setNextTextField:firstTexField]; @@ -1284,7 +1311,7 @@ var CPZeroKeyCode = 48, else [_textFieldMinute setNextTextField:_textFieldHour]; - if (isEnglishFormat) + if (isAmericanFormat) [_textFieldSecond setNextTextField:_textFieldPMAM]; else if ((datePickerElements & CPYearMonthDayDatePickerElementFlag) == CPYearMonthDayDatePickerElementFlag) [_textFieldSecond setNextTextField:firstTexField]; @@ -1304,9 +1331,9 @@ var CPZeroKeyCode = 48, var datePickerElements = [_datePicker datePickerElements], firstTexField = _textFieldMonth, secondTextField = _textFieldDay, - isEnglishFormat = [_datePicker _isEnglishFormat]; + isAmericanFormat = [_datePicker _isAmericanFormat]; - if (!isEnglishFormat) + if (!isAmericanFormat) { firstTexField = _textFieldDay; secondTextField = _textFieldMonth; @@ -1322,14 +1349,14 @@ var CPZeroKeyCode = 48, if (datePickerElements & CPYearMonthDatePickerElementFlag) [_textFieldHour setPreviousTextField:_textFieldYear]; - else if (isEnglishFormat) + else if (isAmericanFormat) [_textFieldHour setPreviousTextField:_textFieldPMAM]; else if ((datePickerElements & CPHourMinuteSecondDatePickerElementFlag) == CPHourMinuteSecondDatePickerElementFlag) [_textFieldHour setPreviousTextField:_textFieldSecond]; else [_textFieldHour setPreviousTextField:_textFieldMinute]; - if (!isEnglishFormat) + if (!isAmericanFormat) [_textFieldYear setPreviousTextField:_textFieldMonth]; else if ((datePickerElements & CPYearMonthDayDatePickerElementFlag) == CPYearMonthDayDatePickerElementFlag) [_textFieldYear setPreviousTextField:_textFieldDay]; @@ -1338,7 +1365,7 @@ var CPZeroKeyCode = 48, [secondTextField setPreviousTextField:firstTexField]; - if (isEnglishFormat && datePickerElements & CPHourMinuteDatePickerElementFlag) + if (isAmericanFormat && datePickerElements & CPHourMinuteDatePickerElementFlag) [firstTexField setPreviousTextField:_textFieldPMAM]; else if ((datePickerElements & CPHourMinuteSecondDatePickerElementFlag) == CPHourMinuteSecondDatePickerElementFlag) [firstTexField setPreviousTextField:_textFieldSecond]; @@ -1530,7 +1557,7 @@ var CPMonthDateType = 0, } } - if (parseInt(newValue) > [self _maxNumberWithMaxDate] || ([_datePicker _isEnglishFormat] && _dateType == CPHourDateType && parseInt(newValue) > 12)) + if (parseInt(newValue) > [self _maxNumberWithMaxDate] || ([_datePicker _isAmericanFormat] && _dateType == CPHourDateType && parseInt(newValue) > 12)) return; _firstEvent = NO; @@ -1549,7 +1576,7 @@ var CPMonthDateType = 0, if ([stringValue length]) { - if ([_datePicker _isEnglishFormat] && [self dateType] == CPHourDateType) + if ([_datePicker _isAmericanFormat] && [self dateType] == CPHourDateType) { var isAMHour = [[self superview] _isAMHour]; @@ -1593,7 +1620,7 @@ var CPMonthDateType = 0, if (![objectValue length]) objectValue = [self objectValue]; - if ([_datePicker _isEnglishFormat] && [self dateType] == CPHourDateType) + if ([_datePicker _isAmericanFormat] && [self dateType] == CPHourDateType) { var isAMHour = [[self superview] _isAMHour]; @@ -1621,7 +1648,7 @@ var CPMonthDateType = 0, } else if (_dateType != CPAMPMDateType) { - if (_dateType == CPHourDateType && [_datePicker _isEnglishFormat]) + if (_dateType == CPHourDateType && [_datePicker _isAmericanFormat]) { var value = parseInt(aStringValue); diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index a1699aa34..1189ad962 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -236,6 +236,7 @@ var _CPEventPeriodicEventPeriod = 0, _subtype = aSubtype; _data1 = aData1; _data2 = aData2; + _windowNumber = aWindowNumber; } return self; diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 662280d16..c104eba86 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -182,7 +182,7 @@ var CPBindingOperationAnd = 0, allBindings = [bindingsForObject allKeys], count = [allBindings count]; - while(count--) + while (count--) { if ([[anObject class] isBindingExclusive:allBindings[count]]) return NO; diff --git a/AppKit/CPPanel.j b/AppKit/CPPanel.j index 89a8f0355..d371ea7a4 100644 --- a/AppKit/CPPanel.j +++ b/AppKit/CPPanel.j @@ -26,6 +26,8 @@ CPOKButton = 1; CPCancelButton = 0; +CPDocModalWindowMask = 1 << 6; + /*! @ingroup appkit @class CPPanel @@ -51,8 +53,6 @@ CPCancelButton = 0; @global @class CPWindow */ -CPDocModalWindowMask = 1 << 6; - @implementation CPPanel : CPWindow { BOOL _becomesKeyOnlyIfNeeded; diff --git a/AppKit/CPProgressIndicator.j b/AppKit/CPProgressIndicator.j index 3732c229b..683cc0127 100644 --- a/AppKit/CPProgressIndicator.j +++ b/AppKit/CPProgressIndicator.j @@ -86,6 +86,9 @@ var CPProgressIndicatorSpinningStyleColors = []; @"spinning-mini-gif": [CPNull null], @"spinning-small-gif": [CPNull null], @"spinning-regular-gif": [CPNull null], + @"circular-border-color": [CPNull null], + @"circular-border-size": 1, + @"circular-color": [CPNull null] }; } @@ -368,6 +371,7 @@ var CPProgressIndicatorSpinningStyleColors = []; - (void)drawBar { [self setNeedsLayout]; + [self setNeedsDisplay:YES]; } - (CPView)createEphemeralSubviewNamed:(CPString)aName @@ -413,6 +417,9 @@ var CPProgressIndicatorSpinningStyleColors = []; { if (_style == CPProgressIndicatorSpinningStyle) { + if (!_indeterminate) + return; + // This will cause the bar view to go away due to having a nil rect when _style == CPProgressIndicatorSpinningStyle. [self layoutEphemeralSubviewNamed:"bar-view" positioned:CPWindowBelow @@ -438,6 +445,54 @@ var CPProgressIndicatorSpinningStyleColors = []; [self setBackgroundColor:nil]; } +- (void)drawRect:(CGRect)aRect +{ + if (_style == CPProgressIndicatorSpinningStyle && !_indeterminate) + { + var context = [[CPGraphicsContext currentContext] graphicsPort], + rect = CGRectMakeCopy(aRect), + borderSize = [self currentValueForThemeAttribute:@"circular-border-size"]; + + rect.origin.x += borderSize; + rect.origin.y += borderSize; + rect.size.width = rect.size.width - borderSize * 2; + rect.size.height = rect.size.height - borderSize * 2; + + if ([self doubleValue] > [self minValue] && [self doubleValue] < [self maxValue]) + { + var midX = CGRectGetMidX(rect), + midY = CGRectGetMidY(rect), + endAngle = Math.PI * 2 * (([self doubleValue] - [self minValue]) / ([self maxValue] - [self minValue])) - Math.PI / 2, + radius = MIN(rect.size.width / 2, rect.size.height / 2) + + CGContextBeginPath(context); + CGContextSetLineWidth(context, borderSize); + CGContextSetFillColor(context, [self currentValueForThemeAttribute:@"circular-color"]) + CGContextMoveToPoint(context, midX, midY); + CGContextAddArc(context, midX, midY, radius, 3 * Math.PI / 2, endAngle, YES) + CGContextAddLineToPoint(context, midX, midY); + CGContextClosePath(context); + CGContextFillPath(context); + CGContextStrokePath(context); + } + else if ([self doubleValue] == [self maxValue]) + { + CGContextBeginPath(context); + CGContextSetFillColor(context, [self currentValueForThemeAttribute:@"circular-color"]) + CGContextAddEllipseInRect(context, rect); + CGContextClosePath(context); + CGContextFillPath(context); + } + + CGContextBeginPath(context); + CGContextSetStrokeColor(context , [self currentValueForThemeAttribute:@"circular-border-color"]); + CGContextSetLineWidth(context, borderSize); + CGContextAddEllipseInRect(context, rect); + CGContextClosePath(context); + CGContextStrokePath(context); + } +} + @end diff --git a/AppKit/CPRadio.j b/AppKit/CPRadio.j index bb845aef3..cd5f5196d 100644 --- a/AppKit/CPRadio.j +++ b/AppKit/CPRadio.j @@ -29,6 +29,7 @@ @global CPApp +CPRadioImageOffset = 4.0; /*! @ingroup appkit @@ -67,9 +68,6 @@ option. */ - -CPRadioImageOffset = 4.0; - @implementation CPRadio : CPButton { CPRadioGroup _radioGroup; @@ -269,9 +267,9 @@ var CPRadioRadioGroupKey = @"CPRadioRadioGroupKey"; - (BOOL)selectRadioWithTag:(int)tag { var index = [_radios indexOfObjectPassingTest:function(radio) - { - return [radio tag] === tag; - }]; + { + return [radio tag] === tag; + }]; if (index !== CPNotFound) { diff --git a/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j index a774f6bb3..0ce2e2f0e 100644 --- a/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j +++ b/AppKit/CPRuleEditor/CPPredicateEditorRowTemplate.j @@ -487,9 +487,9 @@ CPTransformableAttributeType = 1800; - (id)copy { - var views = [CPArray array]; + var views = [CPArray array], + copy = [[[self class] alloc] init]; - var copy = [[[self class] alloc] init]; [copy _setTemplateType:_templateType]; [copy _setOptions:_predicateOptions]; [copy _setModifier:_predicateModifier]; diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 90a8c9b2a..f6de3acd0 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -86,15 +86,6 @@ var _isBrowserUsingOverlayScrollers = function() #endif }; -/*! - @ingroup appkit - @class CPScrollView - - Used to display views that are too large for the viewing area. the CPScrollView - places scroll bars on the side of the view to allow the user to scroll and see the entire - contents of the view. -*/ - var TIMER_INTERVAL = 0.2, CPScrollViewDelegate_scrollViewWillScroll_ = 1 << 0, CPScrollViewDelegate_scrollViewDidScroll_ = 1 << 1, @@ -104,7 +95,14 @@ var TIMER_INTERVAL = 0.2, var CPScrollerStyleGlobal = CPScrollerStyleOverlay, CPScrollerStyleGlobalChangeNotification = @"CPScrollerStyleGlobalChangeNotification"; +/*! + @ingroup appkit + @class CPScrollView + Used to display views that are too large for the viewing area. the CPScrollView + places scroll bars on the side of the view to allow the user to scroll and see the entire + contents of the view. +*/ @implementation CPScrollView : CPView { CPClipView _contentView; @@ -1584,6 +1582,8 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", */ - (void)awakeFromCib { + [super awakeFromCib]; + [self _updateScrollerStyle]; [self _updateCornerAndHeaderView]; } diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index f293b34dd..98110ef5f 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -50,11 +50,6 @@ CPNoScrollerParts = 0; CPOnlyScrollerArrows = 1; CPAllScrollerParts = 2; -/*! - @ingroup appkit - @class CPScroller -*/ - var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScrollerIncrementLine, CPScrollerKnob], NAMES_FOR_PARTS = {}, PARTS_FOR_NAMES = {}; @@ -78,6 +73,11 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); CPThemeStateScrollerKnobLight = CPThemeState("scroller-knob-light"); CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); +/*! + @ingroup appkit + @class CPScroller +*/ + @implementation CPScroller : CPControl { CPUsableScrollerParts _usableParts; diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index 8ad2e3b41..e6c12bfb4 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -34,9 +34,8 @@ CPSearchFieldRecentsMenuItemTag = 1001; CPSearchFieldClearRecentsMenuItemTag = 1002; CPSearchFieldNoRecentsMenuItemTag = 1003; -var CPAutosavedRecentsChangedNotification = @"CPAutosavedRecentsChangedNotification"; - -var RECENT_SEARCH_PREFIX = @" "; +var CPAutosavedRecentsChangedNotification = @"CPAutosavedRecentsChangedNotification", + RECENT_SEARCH_PREFIX = @" "; /*! @ingroup appkit @@ -74,8 +73,8 @@ var RECENT_SEARCH_PREFIX = @" "; @"image-find": [CPNull null], @"image-cancel": [CPNull null], @"image-cancel-pressed": [CPNull null], - @"image-search-left-margin" : 0, - @"image-cancel-right-margin" : 0 + @"image-search-inset" : CGInsetMake(0, 0, 0, 5), + @"image-cancel-inset" : CGInsetMake(0, 5, 0, 0) }; } @@ -268,9 +267,10 @@ var RECENT_SEARCH_PREFIX = @" "; */ - (CGRect)searchButtonRectForBounds:(CGRect)rect { - var size = [[self currentValueForThemeAttribute:@"image-search"] size] || CGSizeMakeZero(); + var size = [[self currentValueForThemeAttribute:@"image-search"] size] || CGSizeMakeZero(), + inset = [self currentValueForThemeAttribute:@"image-search-inset"]; - return CGRectMake([self currentValueForThemeAttribute:@"image-search-left-margin"], (CGRectGetHeight(rect) - size.height) / 2, size.width, size.height); + return CGRectMake(inset.left - inset.right, inset.top - inset.bottom + (CGRectGetHeight(rect) - size.height) / 2, size.width, size.height); } /*! @@ -280,9 +280,10 @@ var RECENT_SEARCH_PREFIX = @" "; */ - (CGRect)cancelButtonRectForBounds:(CGRect)rect { - var size = [[self currentValueForThemeAttribute:@"image-cancel"] size] || CGSizeMakeZero(); + var size = [[self currentValueForThemeAttribute:@"image-cancel"] size] || CGSizeMakeZero(), + inset = [self currentValueForThemeAttribute:@"image-cancel-inset"]; - return CGRectMake(CGRectGetWidth(rect) - size.width - [self currentValueForThemeAttribute:@"image-cancel-right-margin"], (CGRectGetHeight(rect) - size.width) / 2, size.height, size.height); + return CGRectMake(CGRectGetWidth(rect) - size.width + inset.left - inset.right, inset.top - inset.bottom + (CGRectGetHeight(rect) - size.width) / 2, size.height, size.height); } // Managing Menu Templates diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index bc57454d4..2ef546f5e 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -516,7 +516,7 @@ CPSegmentSwitchTrackingMomentary = 2; */ - (void)drawSegmentBezel:(int)aSegment highlight:(BOOL)shouldHighlight { - if(aSegment < _themeStates.length) + if (aSegment < _themeStates.length) { if (shouldHighlight) _themeStates[aSegment] = _themeStates[aSegment].and(CPThemeStateHighlighted); @@ -745,29 +745,23 @@ CPSegmentSwitchTrackingMomentary = 2; if (aSegment < 0 || (segmentCount > 0 && aSegment >= segmentCount)) return; - // Invalidate frames for segments on the right. They will be lazily computed by -frameForSegment:. - for (var i = aSegment; i < segmentCount; i++) - [_segments[i] setFrame:CGRectMakeZero()]; + var width = 0; - [self setFrameSize:[self intrinsicContentSize]]; + if (segmentCount > 0) + { + // Invalidate frames for segments on the right. They will be lazily computed by -frameForSegment:. + for (var i = aSegment; i < segmentCount; i++) + [_segments[i] setFrame:CGRectMakeZero()]; + + width = CGRectGetMaxX([self frameForSegment:(segmentCount - 1)]); + } + + [self setFrameSize:CGSizeMake(width, CGRectGetHeight([self frame]))]; [self setNeedsLayout]; [self setNeedsDisplay:YES]; } -/*! @ignore */ -- (CGSize)intrinsicContentSize -{ - // frameForSegment is recursively called backwards. All previously invalidated frames will be recomputed. - var segmentCount = [self segmentCount], - width = 0; - - if (segmentCount > 0) - width = CGRectGetMaxX([self frameForSegment:(segmentCount - 1)]); - - return CGSizeMake(width, [self valueForThemeAttribute:@"min-size"].height); -} - /*! Returns the bounding rectangle for the specified segment. @param aSegment the segment to get the rectangle for @@ -819,6 +813,12 @@ CPSegmentSwitchTrackingMomentary = 2; return CGRectMake(left + contentInset.left, contentInset.top, width - contentInset.left - contentInset.right, height - contentInset.top - contentInset.bottom); } +- (CGSize)_minimumFrameSize +{ + // The current width is always the minimum width. + return CGSizeMake(CGRectGetWidth([self frame]), [self currentValueForThemeAttribute:@"min-size"].height); +} + /*! Returns the segment that is hit by the specified point. @param aPoint the point to test for a segment hit diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index 04c66b51c..e10c67e8d 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -55,7 +55,9 @@ var CPSplitViewDelegate_splitView_canCollapseSubview_ CPSplitViewDelegate_splitView_constrainMaxCoordinate_ofSubviewAt_ = 1 << 5, CPSplitViewDelegate_splitView_constrainMinCoordinate_ofSubviewAt_ = 1 << 6, CPSplitViewDelegate_splitView_constrainSplitPosition_ofSubviewAt_ = 1 << 7, - CPSplitViewDelegate_splitView_resizeSubviewsWithOldSize_ = 1 << 8; + CPSplitViewDelegate_splitView_resizeSubviewsWithOldSize_ = 1 << 8, + CPSplitViewDelegate_splitViewDidResizeSubviews_ = 1 << 9, + CPSplitViewDelegate_splitViewWillResizeSubviews_ = 1 << 10; #define SPLIT_VIEW_MAYBE_POST_WILL_RESIZE() \ if ((_suppressResizeNotificationsMask & DidPostWillResizeNotification) === 0) \ @@ -967,26 +969,14 @@ The sum of the views and the sum of the dividers should be equal to the size of if (_delegate === aDelegate) return; - if ([_delegate respondsToSelector:@selector(splitViewDidResizeSubviews:)]) - [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:CPSplitViewDidResizeSubviewsNotification object:self]; + _delegate = aDelegate; + _implementedDelegateMethods = 0; if ([_delegate respondsToSelector:@selector(splitViewWillResizeSubviews:)]) - [[CPNotificationCenter defaultCenter] removeObserver:_delegate name:CPSplitViewWillResizeSubviewsNotification object:self]; + _implementedDelegateMethods |= CPSplitViewDelegate_splitViewWillResizeSubviews_; - _delegate = aDelegate; - _implementedDelegateMethods = 0; - - if ([_delegate respondsToSelector:@selector(splitViewDidResizeSubviews:)]) - [[CPNotificationCenter defaultCenter] addObserver:_delegate - selector:@selector(splitViewDidResizeSubviews:) - name:CPSplitViewDidResizeSubviewsNotification - object:self]; - - if ([_delegate respondsToSelector:@selector(splitViewWillResizeSubviews:)]) - [[CPNotificationCenter defaultCenter] addObserver:_delegate - selector:@selector(splitViewWillResizeSubviews:) - name:CPSplitViewWillResizeSubviewsNotification - object:self]; + if ([_delegate respondsToSelector:@selector(splitViewDidResizeSubviews:)]) + _implementedDelegateMethods |= CPSplitViewDelegate_splitViewDidResizeSubviews_; if ([_delegate respondsToSelector:@selector(splitView:canCollapseSubview:)]) _implementedDelegateMethods |= CPSplitViewDelegate_splitView_canCollapseSubview_; @@ -1064,27 +1054,12 @@ The sum of the views and the sum of the dividers should be equal to the size of - (void)_postNotificationWillResize { - var userInfo = nil; - - if (_currentDivider !== CPNotFound) - userInfo = @{ @"CPSplitViewDividerIndex": _currentDivider }; - - [[CPNotificationCenter defaultCenter] postNotificationName:CPSplitViewWillResizeSubviewsNotification - object:self - userInfo:userInfo]; + [self _sendDelegateSplitViewWillResizeSubviews]; } - (void)_postNotificationDidResize { - var userInfo = nil; - - if (_currentDivider !== CPNotFound) - userInfo = @{ @"CPSplitViewDividerIndex": _currentDivider }; - - [[CPNotificationCenter defaultCenter] postNotificationName:CPSplitViewDidResizeSubviewsNotification - object:self - userInfo:userInfo]; - + [self _sendDelegateSplitViewDidResizeSubviews]; // TODO Cocoa always autosaves on "viewDidEndLiveResize". If Cappuccino adds support for this we // should do the same. @@ -1369,6 +1344,40 @@ The sum of the views and the sum of the dividers should be equal to the size of [_delegate splitView:self resizeSubviewsWithOldSize:oldSize]; } +/*! + @ignore + Call the delegate splitViewWillResizeSubviews: +*/ +- (void)_sendDelegateSplitViewWillResizeSubviews +{ + var userInfo = nil; + + if (_currentDivider !== CPNotFound) + userInfo = @{ @"CPSplitViewDividerIndex": _currentDivider }; + + if (_implementedDelegateMethods & CPSplitViewDelegate_splitViewWillResizeSubviews_) + [_delegate splitViewWillResizeSubviews:[[CPNotification alloc] initWithName:CPSplitViewWillResizeSubviewsNotification object:self userInfo:userInfo]]; + + [[CPNotificationCenter defaultCenter] postNotificationName:CPSplitViewWillResizeSubviewsNotification object:self userInfo:userInfo]; +} + +/*! + @ignore + Call the delegate splitViewDidResizeSubviews: +*/ +- (void)_sendDelegateSplitViewDidResizeSubviews +{ + var userInfo = nil; + + if (_currentDivider !== CPNotFound) + userInfo = @{ @"CPSplitViewDividerIndex": _currentDivider }; + + if (_implementedDelegateMethods & CPSplitViewDelegate_splitViewDidResizeSubviews_) + [_delegate splitViewDidResizeSubviews:[[CPNotification alloc] initWithName:CPSplitViewDidResizeSubviewsNotification object:self userInfo:userInfo]]; + + [[CPNotificationCenter defaultCenter] postNotificationName:CPSplitViewDidResizeSubviewsNotification object:self userInfo:userInfo]; +} + @end diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 6de27c05a..cb09a6639 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -765,6 +765,8 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", - (void)awakeFromCib { + [super awakeFromCib]; + // This cannot be run in initWithCoder because it might call selectTabViewItem:, which is // not safe to call before the views of the tab views items are fully decoded. diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index 8badaef34..36d6d1ef1 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -68,7 +68,7 @@ _textField = [[_CPImageAndTextView alloc] initWithFrame: CGRectMake(5.0, 0.0, CGRectGetWidth([self bounds]) - 10.0, CGRectGetHeight([self bounds]))]; - [_textField setAutoresizingMask:CPViewWidthSizable|CPViewHeightSizable]; + [_textField setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; [_textField setLineBreakMode:CPLineBreakByTruncatingTail]; [_textField setTextColor:[CPColor colorWithRed:51.0 / 255.0 green:51.0 / 255.0 blue:51.0 / 255.0 alpha:1.0]]; @@ -196,7 +196,7 @@ maxX = CGRectGetMaxX(bounds) - 0.5; CGContextSetLineWidth(context, 1); - CGContextSetStrokeColor(context, [CPColor colorWithWhite:192.0/255.0 alpha:1.0]); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:192.0 / 255.0 alpha:1.0]); CGContextBeginPath(context); diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 85bae61ba..9254ba296 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -2100,26 +2100,26 @@ NOT YET IMPLEMENTED found = NO, max_rec = 100; - while (max_rec--) + while (max_rec--) + { + if (!cellView || cellView === contentView) { - if (!cellView || cellView === contentView) + found = NO; + break; + } + else + { + var superview = [cellView superview]; + + if ([superview isKindOfClass:[CPTableView class]]) { - found = NO; + found = YES; break; } - else - { - var superview = [cellView superview]; - if ([superview isKindOfClass:[CPTableView class]]) - { - found = YES; - break; - } - - cellView = superview; - } + cellView = superview; } + } if (found) { @@ -3593,6 +3593,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self setNeedsDisplay:YES]; } + if (!_isViewBased) + [self _setEditingState:NO forView:dataView]; + [self _sendDelegateWillDisplayView:dataView forTableColumn:tableColumn row:row]; return dataView; @@ -5091,7 +5094,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad _editingColumn = column; _editingRow = row; - [aView addObserver:self forKeyPath:@"objectValue" options:CPKeyValueObservingOptionOld|CPKeyValueObservingOptionNew context:"editing"]; + [aView addObserver:self forKeyPath:@"objectValue" options:CPKeyValueObservingOptionOld | CPKeyValueObservingOptionNew context:"editing"]; } return aView; @@ -5196,7 +5199,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [self _notifyViewDidBecomeFirstResponder]; // This is for cell-based tables only. In view-based mode, we do not change the textfield apprearence during an edit. - if (!_isViewBased && _editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && [responder isEditable]) + if (!_isViewBased && _editingRow !== CPNotFound && [responder isKindOfClass:[CPTextField class]] && [responder isEditable] && [responder superview] == self) { [responder setBezeled:YES]; [self _registerForEndEditingNote:responder]; @@ -6391,6 +6394,7 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", - (void)awakeFromCib { + [super awakeFromCib]; [self setThemeState:CPThemeStateTableDataView]; } diff --git a/AppKit/CPText.j b/AppKit/CPText.j index dda60f133..bfbc25594 100644 --- a/AppKit/CPText.j +++ b/AppKit/CPText.j @@ -38,4 +38,16 @@ CPLeftTextMovement = 19; CPRightTextMovement = 20; CPUpTextMovement = 21; CPDownTextMovement = 22; -CPCancelTextMovement = 23; \ No newline at end of file +CPCancelTextMovement = 23; + +@typedef CPWritingDirection +CPWritingDirectionNatural = -1; +CPWritingDirectionLeftToRight = 0; +CPWritingDirectionRightToLeft = 1; + +@typedef CPTextAlignment +CPLeftTextAlignment = 0; +CPRightTextAlignment = 1; +CPCenterTextAlignment = 2; +CPJustifiedTextAlignment = 3; +CPNaturalTextAlignment = 4; \ No newline at end of file diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 0d8576a45..00894190e 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -28,12 +28,12 @@ @import "_CPImageAndTextView.j" @class CPPasteboard +@class CPScrollView @global CPApp @global CPStringPboardType @global CPCursor - @protocol CPTextFieldDelegate @end @@ -65,7 +65,8 @@ var CPTextFieldDOMCurrentElement = nil, CPTextFieldCachedSelectStartFunction = nil, CPTextFieldCachedDragFunction = nil, CPTextFieldBlurHandler = nil, - CPTextFieldInputFunction = nil; + CPTextFieldInputFunction = nil, + CPTexFieldCurrentCSSSelectableField = nil; var CPSecureTextFieldCharacter = "\u2022"; @@ -88,7 +89,12 @@ function CPTextFieldBlurFunction(anEvent, owner, domElement, inputElement, resig { window.setTimeout(function() { + // This will prevent to jump to the focused element + var previousScrollingOrigin = [owner _scrollToVisibleRectAndReturnPreviousOrigin]; + inputElement.focus(); + + [owner _restorePreviousScrollingOrigin:previousScrollingOrigin]; }, 0.0); } } @@ -370,7 +376,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); _sendActionOn = CPKeyUpMask | CPKeyDownMask; - [self setValue:CPLeftTextAlignment forThemeAttribute:@"alignment"]; + [self setValue:CPNaturalTextAlignment forThemeAttribute:@"alignment"]; } return self; @@ -643,6 +649,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); _stringValue = [self stringValue]; + #if PLATFORM(DOM) [self _setCSSStyleForInputElement]; @@ -672,8 +679,13 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if (CPTextFieldInputOwner !== self) return; + // This will prevent to jump to the focused element + var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin]; + element.focus(); + [self _restorePreviousScrollingOrigin:previousScrollingOrigin]; + // Select the text if the textfield became first responder through keyboard interaction if (!_willBecomeFirstResponderByClick) [self _selectText:self immediately:YES]; @@ -688,6 +700,21 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); return YES; } +/*! + Set the selection css style for the DOM element of the textField + @ignore +*/ +- (void)_setEnableCSSSelection:(BOOL)shouldEnable +{ +#if PLATFORM (DOM) + if (CPTexFieldCurrentCSSSelectableField) + CPTexFieldCurrentCSSSelectableField._DOMElement.style[CPBrowserStyleProperty(@"user-select")] = @"none"; + + CPTexFieldCurrentCSSSelectableField = self; + _DOMElement.style[CPBrowserStyleProperty(@"user-select")] = shouldEnable ? @"text" : @"none"; +#endif +} + /*! Set the css style for the input element of the textField @ignore @@ -741,6 +768,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); element.style.textAlign = "right"; break; + case CPNaturalTextAlignment: + element.style.textAlign = ""; + break; + default: element.style.textAlign = "left"; } @@ -783,7 +814,13 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // even if the value has not changed. if ([self _valueIsValid:newValue] === NO) { + // This will prevent to jump to the focused element + var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin]; + element.focus(); + + [self _restorePreviousScrollingOrigin:previousScrollingOrigin]; + return NO; } } @@ -792,7 +829,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // When we are no longer the first responder we don't worry about the key status of our window anymore. [self _setObserveWindowKeyNotifications:NO]; - [self _resignFirstKeyResponder]; + if ([[self window] isKeyWindow]) + [self _resignFirstKeyResponder]; _isEditing = NO; if ([self isEditable]) @@ -970,6 +1008,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } else if ([self isSelectable]) { + [self _setEnableCSSSelection:YES]; if (document.attachEvent) { CPTextFieldCachedSelectStartFunction = [[self window] platformWindow]._DOMBodyElement.onselectstart; @@ -1011,6 +1050,14 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } } +- (void)rightMouseDown:(CPEvent)anEvent +{ + if ([self menuForEvent:anEvent] || [[self nextResponder] isKindOfClass:CPView]) + [super rightMouseDown:anEvent]; + else + [[[anEvent window] platformWindow] _propagateContextMenuDOMEvent:YES]; +} + - (void)mouseDragged:(CPEvent)anEvent { if (![self isEnabled] || !([self isSelectable] || [self isEditable])) @@ -1950,17 +1997,55 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if (!wind) return NO; + var scrollView = [self enclosingScrollView], + previousContentViewBoundsOrigin; + + // Here we scroll to the textField, otherwise the textField could not be in the usable platformRect + var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin]; + var frame = [self convertRectToBase:[self contentRectForBounds:[self bounds]]], usableRect = [[wind platformWindow] usableContentFrame]; frame.origin = [wind convertBaseToGlobal:frame.origin]; + // Here we restore the the previous scrolling posiition + [self _restorePreviousScrollingOrigin:previousScrollingOrigin]; + return (CGRectGetMinX(frame) >= CGRectGetMinX(usableRect) && CGRectGetMaxX(frame) <= CGRectGetMaxX(usableRect) && CGRectGetMinY(frame) >= CGRectGetMinY(usableRect) && CGRectGetMaxY(frame) <= CGRectGetMaxY(usableRect)); } +/*! + @ignore +*/ +- (CGPoint)_scrollToVisibleRectAndReturnPreviousOrigin +{ + var scrollView = [self enclosingScrollView], + previousContentViewBoundsOrigin; + + // Here we scroll to the textField, otherwise the textField could not be in the usable platformRect + if ([scrollView isKindOfClass:[CPScrollView class]]) + { + previousContentViewBoundsOrigin = CGPointMakeCopy([[scrollView contentView] boundsOrigin]); + + if (![[self superview] scrollRectToVisible:[self frame]]) + previousContentViewBoundsOrigin = nil; + } + + return previousContentViewBoundsOrigin; +} + +/*! + @ignore +*/ +- (void)_restorePreviousScrollingOrigin:(CGPoint)scrollingOrigin +{ + if (scrollingOrigin) + [[[self enclosingScrollView] contentView] setBoundsOrigin:scrollingOrigin]; +} + @end var secureStringForString = function(aString) @@ -2082,7 +2167,8 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", newValue = [self valueForBinding:aBinding], value = [destination valueForKeyPath:keyPath]; - if (CPIsControllerMarker(value) && newValue === nil) return; + if (CPIsControllerMarker(value) && newValue === nil) + return; newValue = [self reverseTransformValue:newValue withOptions:options]; @@ -2109,4 +2195,4 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [_source setObjectValue:aValue]; } -@end +@end \ No newline at end of file diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 987f524cb..3bc4b3ea3 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -457,7 +457,13 @@ CPTokenFieldDeleteButtonType = 1; window.setTimeout(function() { + // This will prevent to jump to the focused element + var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin]; + element.focus(); + + [self _restorePreviousScrollingOrigin:previousScrollingOrigin]; + CPTokenFieldInputOwner = self; }, 0.0); diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 6ebd0f2b5..d40d1ad6f 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -26,6 +26,7 @@ @import "CGAffineTransform.j" @import "CGGeometry.j" +@import "CPAppearance.j" @import "CPColor.j" @import "CPGraphicsContext.j" @import "CPResponder.j" @@ -131,7 +132,6 @@ var CPViewFlags = { }, var CPViewHighDPIDrawingEnabled = YES; - /*! @ingroup appkit @class CPView @@ -240,6 +240,10 @@ var CPViewHighDPIDrawingEnabled = YES; BOOL _toolTipInstalled; BOOL _isObserving; + + BOOL _allowsVibrancy @accessors(property=allowsVibrancy); + CPAppearance _appearance @accessors(getter=appearance); + CPAppearance _effectiveAppearance; } /* @@ -327,6 +331,13 @@ var CPViewHighDPIDrawingEnabled = YES; return nil; } +- (void)awakeFromCib +{ + [super awakeFromCib]; + + [self _recomputeAppearance]; +} + - (id)init { return [self initWithFrame:CGRectMakeZero()]; @@ -839,9 +850,9 @@ var CPViewHighDPIDrawingEnabled = YES; */ - (void)viewDidMoveToSuperview { -// if (_graphicsContext) - [self setNeedsDisplay:YES]; + [self _recomputeAppearance]; + [self setNeedsDisplay:YES]; } /*! @@ -1820,7 +1831,7 @@ var CPViewHighDPIDrawingEnabled = YES; else if ([[self nextResponder] isKindOfClass:CPView]) [super rightMouseDown:anEvent]; else - [[[anEvent window] platformWindow] _propagateContextMenuDOMEvent:YES]; + [[[anEvent window] platformWindow] _propagateContextMenuDOMEvent:NO]; } - (CPMenu)menuForEvent:(CPEvent)anEvent @@ -2731,18 +2742,47 @@ setBoundsOrigin: if (CGRectContainsRect(documentViewVisibleRect, rectInDocumentView)) return NO; - var scrollPoint = CGPointMakeCopy(documentViewVisibleRect.origin); + var currentScrollPoint = documentViewVisibleRect.origin, + scrollPoint = CGPointMakeCopy(currentScrollPoint), + rectInDocumentViewMinX = CGRectGetMinX(rectInDocumentView), + documentViewVisibleRectMinX = CGRectGetMinX(documentViewVisibleRect), + doesItFitForWidth = documentViewVisibleRect.size.width >= rectInDocumentView.size.width; // One of the following has to be true since our current visible rect didn't contain aRect. - if (CGRectGetMinX(rectInDocumentView) < CGRectGetMinX(documentViewVisibleRect)) - scrollPoint.x = CGRectGetMinX(rectInDocumentView); - else if (CGRectGetMaxX(rectInDocumentView) > CGRectGetMaxX(documentViewVisibleRect)) - scrollPoint.x += CGRectGetMaxX(rectInDocumentView) - CGRectGetMaxX(documentViewVisibleRect); + if (rectInDocumentViewMinX < documentViewVisibleRectMinX && doesItFitForWidth) + // Scroll to left edge of aRect as it is to the left of the visible rect and it fit inside + scrollPoint.x = rectInDocumentViewMinX; + else if (CGRectGetMaxX(rectInDocumentView) > CGRectGetMaxX(documentViewVisibleRect) && doesItFitForWidth) + // Scroll to right edge of aRect as it is to the right of the visible rect and it fit inside + scrollPoint.x = CGRectGetMaxX(rectInDocumentView) - documentViewVisibleRect.size.width; + else if (rectInDocumentViewMinX > documentViewVisibleRectMinX) + // Scroll to left edge of aRect as it is to the right of the visible rect and it doesn't fit inside + scrollPoint.x = rectInDocumentViewMinX; + else if (CGRectGetMaxX(rectInDocumentView) < CGRectGetMaxX(documentViewVisibleRect)) + // Scroll to right edge of aRect as it is to the left of the visible rect and it doesn't fit inside + scrollPoint.x = CGRectGetMaxX(rectInDocumentView) - documentViewVisibleRect.size.width; - if (CGRectGetMinY(rectInDocumentView) < CGRectGetMinY(documentViewVisibleRect)) - scrollPoint.y = CGRectGetMinY(rectInDocumentView); - else if (CGRectGetMaxY(rectInDocumentView) > CGRectGetMaxY(documentViewVisibleRect)) - scrollPoint.y += CGRectGetMaxY(rectInDocumentView) - CGRectGetMaxY(documentViewVisibleRect); + var rectInDocumentViewMinY = CGRectGetMinY(rectInDocumentView), + documentViewVisibleRectMinY = CGRectGetMinY(documentViewVisibleRect), + doesItFitForHeight = documentViewVisibleRect.size.height >= rectInDocumentView.size.height; + + if (rectInDocumentViewMinY < documentViewVisibleRectMinY && doesItFitForHeight) + // Scroll to top edge of aRect as it is above the visible rect and it fit inside + scrollPoint.y = rectInDocumentViewMinY; + else if (CGRectGetMaxY(rectInDocumentView) > CGRectGetMaxY(documentViewVisibleRect) && doesItFitForHeight) + // Scroll to bottom edge of aRect as it is below the visible rect and it fit inside + scrollPoint.y = CGRectGetMaxY(rectInDocumentView) - documentViewVisibleRect.size.height; + else if (rectInDocumentViewMinY > documentViewVisibleRectMinY) + // Scroll to top edge of aRect as it is below the visible rect and it doesn't fit inside + scrollPoint.y = rectInDocumentViewMinY; + else if (CGRectGetMaxY(rectInDocumentView) < CGRectGetMaxY(documentViewVisibleRect)) + // Scroll to bottom edge of aRect as it is above the visible rect and it doesn't fit inside + scrollPoint.y = CGRectGetMaxY(rectInDocumentView) - documentViewVisibleRect.size.height; + + // Don't scroll if aRect contains the whole visible rect as it is already as visible as possible. + // We check this by comparing to new scrollPoint to the current. + if (CGPointEqualToPoint(scrollPoint, currentScrollPoint)) + return NO; [enclosingClipView scrollToPoint:scrollPoint]; @@ -3480,6 +3520,85 @@ setBoundsOrigin: return (_ephemeralSubviewsForNames[aViewName] || nil); } +@end + + +@implementation CPView (Appearance) + +/*! Returns the receiver's appearance if any, or ask the superview and returns it. +*/ +- (CPAppearance)effectiveAppearance +{ + if (_appearance) + return _appearance; + + return [_superview effectiveAppearance]; +} + +- (void)setAppearance:(CPAppearance)anAppearance +{ + if ([_appearance isEqual:anAppearance]) + return; + + [self willChangeValueForKey:@"appearance"]; + _appearance = anAppearance; + [self didChangeValueForKey:@"appearance"]; + + [self _recomputeAppearance]; +} + +/*! @ignore +*/ +- (void)_recomputeAppearance +{ + // if we don't have a themeState, it means + // the view is not decoding from a cib, so we just return. + // this method will be called again in awakeFromCib + if (!_themeState) + return; + + var effectiveAppearance = [self effectiveAppearance]; + + if ([effectiveAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameAqua]]) + { + [self setThemeState:CPThemeStateAppearanceAqua]; + [self unsetThemeState:CPThemeStateAppearanceLightContent]; + [self unsetThemeState:CPThemeStateAppearanceVibrantLight]; + [self unsetThemeState:CPThemeStateAppearanceVibrantDark]; + } + else if ([effectiveAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameLightContent]]) + { + [self unsetThemeState:CPThemeStateAppearanceAqua]; + [self setThemeState:CPThemeStateAppearanceLightContent]; + [self unsetThemeState:CPThemeStateAppearanceVibrantLight]; + [self unsetThemeState:CPThemeStateAppearanceVibrantDark]; + } + else if ([effectiveAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]) + { + [self unsetThemeState:CPThemeStateAppearanceAqua]; + [self unsetThemeState:CPThemeStateAppearanceLightContent]; + [self setThemeState:CPThemeStateAppearanceVibrantLight]; + [self unsetThemeState:CPThemeStateAppearanceVibrantDark]; + } + else if ([effectiveAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]) + { + [self unsetThemeState:CPThemeStateAppearanceAqua]; + [self unsetThemeState:CPThemeStateAppearanceLightContent]; + [self unsetThemeState:CPThemeStateAppearanceVibrantLight]; + [self setThemeState:CPThemeStateAppearanceVibrantDark]; + } + else + { + [self unsetThemeState:CPThemeStateAppearanceAqua]; + [self unsetThemeState:CPThemeStateAppearanceLightContent]; + [self unsetThemeState:CPThemeStateAppearanceVibrantLight]; + [self unsetThemeState:CPThemeStateAppearanceVibrantDark]; + } + + [_subviews makeObjectsPerformSelector:@selector(_recomputeAppearance)]; +} + + @end var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", @@ -3502,7 +3621,8 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", CPReuseIdentifierKey = @"CPReuseIdentifierKey", CPViewScaleKey = @"CPViewScaleKey", CPViewSizeScaleKey = @"CPViewSizeScaleKey", - CPViewIsScaledKey = @"CPViewIsScaledKey"; + CPViewIsScaledKey = @"CPViewIsScaledKey", + CPViewAppearanceKey = @"CPViewAppearanceKey"; @implementation CPView (CPCoding) @@ -3617,6 +3737,8 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", _themeAttributes[attributeName] = CPThemeAttributeDecode(aCoder, attributeName, attributes[count], _theme, themeClass); } + [self setAppearance:[aCoder decodeObjectForKey:CPViewAppearanceKey]]; + [self setNeedsDisplay:YES]; [self setNeedsLayout]; } @@ -3705,6 +3827,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", [aCoder encodeSize:[self scaleSize] forKey:CPViewScaleKey]; [aCoder encodeSize:[self _hierarchyScaleSize] forKey:CPViewSizeScaleKey]; [aCoder encodeBool:_isScaled forKey:CPViewIsScaledKey]; + [aCoder encodeObject:_appearance forKey:CPViewAppearanceKey]; } @end diff --git a/AppKit/CPVisualEffectView.j b/AppKit/CPVisualEffectView.j new file mode 100644 index 000000000..ece566562 --- /dev/null +++ b/AppKit/CPVisualEffectView.j @@ -0,0 +1,231 @@ +/* + * CPVisualEffectView.j + * AppKit + * + * Created by Antoine Mercadal. + * Copyright 2015, 280 Cappuccino Project. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import +@import "CPAppearance.j" +@import "CPView.j" + +@typedef CPVisualEffectMaterial +CPVisualEffectMaterialAppearanceBased = 0; +CPVisualEffectMaterialLight = 1; +CPVisualEffectMaterialDark = 2; +CPVisualEffectMaterialTitlebar = 3; + +@typedef CPVisualEffectBlendingMode +CPVisualEffectBlendingModeBehindWindow = 0; +CPVisualEffectBlendingModeWithinWindow = 1; + +@typedef CPVisualEffectState +CPVisualEffectStateFollowsWindowActiveState = 0; +CPVisualEffectStateActive = 1; +CPVisualEffectStateInactive = 2; + + +/*! @ingroup appkit + + Very naive implementation of CPVisualEffectView. This view allows + to use vibrancy effect. This is only working with Safari 9+ and the + support in Chrome/ium should come quite soon. + Using this class with a browser that doesn't support backdrop-filter + While still work, but you will not get the blurry effect. +*/ +@implementation CPVisualEffectView : CPView +{ + CPImage _maskImage @accessors(property=maskImage); + CPVisualEffectBlendingMode _blendingMode @accessors(property=blendingMode); + CPVisualEffectMaterial _material @accessors(property=material); + CPVisualEffectState _state @accessors(property=state); +} + + +#pragma mark - +#pragma mark Initialization + +- (id)initWithFrame:(CGRect)aFrame +{ + if (self = [super initWithFrame:aFrame]) + { + _material = CPVisualEffectMaterialAppearanceBased; + _blendingMode = CPVisualEffectBlendingModeWithinWindow; + _state = CPVisualEffectStateFollowsWindowActiveState; + _appearance = [CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]; + } + + return self; +} + + +#pragma mark - +#pragma mark CPVisualEffectView API + +/*! Sets the appearance of the CPVisualEffectView. + + Only CPAppearance named CPAppearanceNameVibrantDark or CPAppearanceNameVibrantLight are valid + + @param anAppearance the CPAppearance. +*/ +- (void)setAppearance:(CPAppearance)anAppearance +{ + if (![self _validAppearance:anAppearance]) + [CPException raise:CPInvalidArgumentException reason:"Appearance can only be CPAppearanceNameVibrantDark or CPAppearanceNameVibrantLight in CPVisualEffectView, but is " + anAppearance]; + + [super setAppearance:anAppearance]; + [self _applyVibrancyState]; +} + +/*! Sets the received effect state. + Possible values: +
+    CPVisualEffectStateFollowsWindowActiveState (default)
+    CPVisualEffectStateActive
+    CPVisualEffectStateInactive
+    
+*/ +- (void)setState:(CPVisualEffectState)aState +{ + if (_state == aState) + return; + + [self willChangeValueForKey:"state"]; + _state = aState; + [self didChangeValueForKey:"state"]; + + [self _applyVibrancyState]; +} + + +#pragma mark - +#pragma mark Utilities + +- (void)_setEffectEnabled:(BOOL)shouldEnable +{ + var dark = [[self appearance] isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]], + prop = CPBrowserStyleProperty("backdrop-filter"), + color = (dark ? [CPColor colorWithHexString:@"1e1e1e"] : [CPColor whiteColor]), + finalColor = shouldEnable ? [color colorWithAlphaComponent:0.6] : color; + + [self setBackgroundColor:finalColor]; + +#if PLATFORM(DOM) + self._DOMElement.style[prop] = shouldEnable ? "blur(30px)" : nil; +#endif + +} + +- (void)_applyVibrancyState +{ + switch (_state) + { + case CPVisualEffectStateFollowsWindowActiveState: + [self _setEffectEnabled:[self hasThemeState:CPThemeStateKeyWindow]]; + break; + + case CPVisualEffectStateActive: + [self _setEffectEnabled:YES]; + break; + + case CPVisualEffectStateInactive: + [self _setEffectEnabled:NO]; + break; + } +} + +- (BOOL)_validAppearance:(CPAppearance)anAppearance +{ + return [anAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]] || [anAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; +} + + +#pragma mark - +#pragma mark Overrides + +- (BOOL)setThemeState:(ThemeState)aState +{ + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + + var r = [super setThemeState:aState]; + + if (r) + [self _applyVibrancyState]; + + return r; +} + +- (BOOL)unsetThemeState:(ThemeState)aState +{ + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + + var r = [super unsetThemeState:aState]; + + if (r) + [self _applyVibrancyState]; + + return r; +} + +- (void)viewDidMoveToSuperview +{ + [super viewDidMoveToSuperview]; + + if (_superview) + [self _applyVibrancyState]; +} + +- (void)viewDidMoveToWindow +{ + [super viewDidMoveToWindow]; + + if (_window) + [self _applyVibrancyState]; +} + + +#pragma mark - +#pragma mark CPCoding + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super initWithCoder:aCoder]) + { + _blendingMode = [aCoder decodeIntForKey:@"_blendingMode"] || CPVisualEffectBlendingModeWithinWindow; + _maskImage = [aCoder decodeObjectForKey:@"_maskImage"]; + _material = [aCoder decodeIntForKey:@"_material"] || CPVisualEffectMaterialAppearanceBased; + _state = [aCoder decodeIntForKey:@"_state"] || CPVisualEffectStateFollowsWindowActiveState; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeObject:_maskImage forKey:@"_maskImage"]; + [aCoder encodeInt:_blendingMode forKey:@"_blendingMode"]; + [aCoder encodeInt:_material forKey:@"_material"]; + [aCoder encodeInt:_state forKey:@"_state"]; +} + + +@end \ No newline at end of file diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index eaf0ecee5..f34e923a5 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -63,22 +63,28 @@ @optional - (BOOL)windowShouldClose:(CPWindow)aWindow; +- (CGSize)windowWillResize:(CPWindow)sender toSize:(CGSize)aSize; - (CPUndoManager)windowWillReturnUndoManager:(CPWindow)window; - (void)windowDidBecomeKey:(CPNotification)aNotification; - (void)windowDidBecomeMain:(CPNotification)aNotification; +- (void)windowDidDeminiaturize:(CPNotification)notification; - (void)windowDidEndSheet:(CPNotification)aNotification; +- (void)windowDidMiniaturize:(CPNotification)notification; - (void)windowDidMove:(CPNotification)aNotification; - (void)windowDidResignKey:(CPNotification)aNotification; - (void)windowDidResignMain:(CPNotification)aNotification; - (void)windowDidResize:(CPNotification)aNotification; +- (void)windowWillMiniaturize:(CPNotification)notification; - (void)windowWillBeginSheet:(CPNotification)aNotification; - (void)windowWillClose:(CPWindow)aWindow; @end -var CPWindowDelegate_windowShouldClose_ = 1 << 1 +var CPWindowDelegate_windowShouldClose_ = 1 << 1, CPWindowDelegate_windowWillReturnUndoManager_ = 1 << 2, - CPWindowDelegate_windowWillClose_ = 1 << 3; + CPWindowDelegate_windowWillClose_ = 1 << 3, + CPWindowDelegate_windowWillResize_toSize_ = 1 << 4; + var CPWindowSaveImage = nil, @@ -747,6 +753,9 @@ CPTexturedBackgroundWindowMask size.width = newSize.width; size.height = newSize.height; + if (!_isAnimating) + size = [self _sendDelegateWindowWillResizeToSize:size]; + [_windowView setFrameSize:size]; if (_hasShadow) @@ -975,6 +984,7 @@ CPTexturedBackgroundWindowMask [[CPNotificationCenter defaultCenter] removeObserver:self name:_CPPlatformWindowWillCloseNotification object:nil]; [[self contentView] _removeObservers]; + _hasBecomeKeyWindow = NO; } @@ -1429,6 +1439,9 @@ CPTexturedBackgroundWindowMask [defaultCenter removeObserver:_delegate name:CPWindowDidResizeNotification object:self]; [defaultCenter removeObserver:_delegate name:CPWindowWillBeginSheetNotification object:self]; [defaultCenter removeObserver:_delegate name:CPWindowDidEndSheetNotification object:self]; + [defaultCenter removeObserver:_delegate name:CPWindowDidMiniaturizeNotification object:self]; + [defaultCenter removeObserver:_delegate name:CPWindowDidDeminiaturizeNotification object:self]; + [defaultCenter removeObserver:_delegate name:CPWindowWillMiniaturizeNotification object:self]; _delegate = aDelegate; _implementedDelegateMethods = 0; @@ -1442,6 +1455,9 @@ CPTexturedBackgroundWindowMask if ([_delegate respondsToSelector:@selector(windowWillClose:)]) _implementedDelegateMethods |= CPWindowDelegate_windowWillClose_; + if ([_delegate respondsToSelector:@selector(windowWillResize:toSize:)]) + _implementedDelegateMethods |= CPWindowDelegate_windowWillResize_toSize_; + if ([_delegate respondsToSelector:@selector(windowDidResignKey:)]) [defaultCenter addObserver:_delegate @@ -1497,6 +1513,27 @@ CPTexturedBackgroundWindowMask selector:@selector(windowDidEndSheet:) name:CPWindowDidEndSheetNotification object:self]; + + if ([_delegate respondsToSelector:@selector(windowDidMiniaturize:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(windowDidMiniaturize:) + name:CPWindowDidMiniaturizeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(windowWillMiniaturize:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(windowWillMiniaturize:) + name:CPWindowWillMiniaturizeNotification + object:self]; + + if ([_delegate respondsToSelector:@selector(windowDidDeminiaturize:)]) + [defaultCenter + addObserver:_delegate + selector:@selector(windowDidDeminiaturize:) + name:CPWindowDidDeminiaturizeNotification + object:self]; } /*! @@ -1809,6 +1846,9 @@ CPTexturedBackgroundWindowMask switch (type) { + case CPAppKitDefined: + return [CPApp activateIgnoringOtherApps:YES]; + case CPFlagsChanged: return [[self firstResponder] flagsChanged:anEvent]; @@ -2023,6 +2063,7 @@ CPTexturedBackgroundWindowMask [self _setupFirstResponder]; _hasBecomeKeyWindow = YES; + _platformWindow._currentKeyWindow = self; [_windowView noteKeyWindowStateChanged]; [_contentView _notifyWindowDidBecomeKey]; @@ -2093,6 +2134,7 @@ CPTexturedBackgroundWindowMask if (CPApp._keyWindow === self) CPApp._keyWindow = nil; + _platformWindow._currentKeyWindow = nil; [_windowView noteKeyWindowStateChanged]; [_contentView _notifyWindowDidResignKey]; @@ -2476,6 +2518,7 @@ CPTexturedBackgroundWindowMask - (void)becomeMainWindow { CPApp._mainWindow = self; + _platformWindow._currentMainWindow = self; [self _synchronizeSaveMenuWithDocumentSaving]; @@ -2498,6 +2541,7 @@ CPTexturedBackgroundWindowMask if (CPApp._mainWindow === self) CPApp._mainWindow = nil; + _platformWindow._currentMainWindow = nil; [_windowView noteMainWindowStateChanged]; } @@ -2736,7 +2780,7 @@ CPTexturedBackgroundWindowMask [[CPNotificationCenter defaultCenter] removeObserver:self name:CPWindowDidEndSheetNotification object:self]; var sheet = _sheetContext[@"nextSheet"], - modalDelegate =_sheetContext[@"nextModalDelegate"], + modalDelegate = _sheetContext[@"nextModalDelegate"], endSelector = _sheetContext[@"nextEndSelector"], contextInfo = _sheetContext[@"nextContextInfo"]; @@ -3473,6 +3517,18 @@ var keyViewComparator = function(lhs, rhs, context) [_delegate windowWillClose:self]; } +/*! + @ignore + Call the delegate windowWillResize:toSize: +*/ +- (CGSize)_sendDelegateWindowWillResizeToSize:(CGSize)aSize +{ + if (!(_implementedDelegateMethods & CPWindowDelegate_windowWillResize_toSize_)) + return aSize; + + return [_delegate windowWillResize:self toSize:aSize]; +} + @end diff --git a/AppKit/CPWindow/_CPPopoverWindowView.j b/AppKit/CPWindow/_CPPopoverWindowView.j index b337be625..aeba11f8a 100644 --- a/AppKit/CPWindow/_CPPopoverWindowView.j +++ b/AppKit/CPWindow/_CPPopoverWindowView.j @@ -26,7 +26,6 @@ @import "CGGradient.j" @import "_CPWindowView.j" -@global CPPopoverAppearanceMinimal var _CPPopoverWindowViewDefaultCursorSize = CGSizeMake(16, 10); @@ -39,7 +38,6 @@ var _CPPopoverWindowViewDefaultCursorSize = CGSizeMake(16, 10); { float _arrowOffsetX @accessors(property=arrowOffsetX); float _arrowOffsetY @accessors(property=arrowOffsetY); - int _appearance @accessors(property=appearance); unsigned _preferredEdge @accessors(property=preferredEdge); CGSize _cursorSize; @@ -123,7 +121,7 @@ var _CPPopoverWindowViewDefaultCursorSize = CGSizeMake(16, 10); { _arrowOffsetX = 0.0; _arrowOffsetY = 0.0; - _appearance = CPPopoverAppearanceMinimal; + _appearance = [CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]; _cursorSize = CGSizeMakeCopy(_CPPopoverWindowViewDefaultCursorSize); } @@ -168,7 +166,7 @@ var _CPPopoverWindowViewDefaultCursorSize = CGSizeMake(16, 10); gradient, frame = [self bounds]; - if (_appearance == CPPopoverAppearanceMinimal) + if ([_appearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]) { gradient = [self valueForThemeAttribute:@"background-gradient"]; strokeColor = [self valueForThemeAttribute:@"stroke-color"]; diff --git a/AppKit/CoreAnimation/CALayer.j b/AppKit/CoreAnimation/CALayer.j index 433a36253..2230b7197 100644 --- a/AppKit/CoreAnimation/CALayer.j +++ b/AppKit/CoreAnimation/CALayer.j @@ -27,7 +27,8 @@ @import "CGContext.j" @import "CGGeometry.j" - +@import "CPColor.j" +@import "CPView.j" #define DOM(aLayer) aLayer._DOMElement @@ -494,11 +495,11 @@ var CALayerRegisteredRunLoopUpdates = nil; */ - (void)display { +#if PLATFORM(DOM) if (!_context) { _context = CGBitmapGraphicsContextCreate(); -#if PLATFORM(DOM) _DOMContentsElement = _context.DOMElement; _DOMContentsElement.style.zIndex = -100; @@ -516,7 +517,6 @@ var CALayerRegisteredRunLoopUpdates = nil; _DOMContentsElement.style.height = ROUND(CGRectGetHeight(_backingStoreFrame)) + "px"; _DOMElement.appendChild(_DOMContentsElement); -#endif } if (USE_BUFFER) @@ -534,6 +534,7 @@ var CALayerRegisteredRunLoopUpdates = nil; [self drawInContext:CABackingStoreGetContext(_contents)]; } +#endif [self composite]; } @@ -796,7 +797,6 @@ if (_DOMContentsElement && aLayer._zPosition > _DOMContentsElement.style.zIndex) if (mask & CALayerDisplayUpdateMask) [layer display]; - else if (mask & CALayerFrameSizeUpdateMask || mask & CALayerCompositeUpdateMask) [layer composite]; diff --git a/AppKit/Jakefile b/AppKit/Jakefile index 70db16a3d..69f958e4c 100644 --- a/AppKit/Jakefile +++ b/AppKit/Jakefile @@ -1,8 +1,6 @@ require("../common.jake"); -checkUlimit(); - var framework = require("objective-j/jake").framework, BundleTask = require("objective-j/jake").BundleTask; diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index cd17fa4a6..fb742b351 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -75,6 +75,12 @@ var PrimaryPlatformWindow = NULL; CPPlatformPasteboard _platformPasteboard; CPString _overriddenEventType; + + CPWindow _currentKeyWindow; + CPWindow _previousKeyWindow; + + CPWindow _currentMainWindow; + CPWindow _previousMainWindow; #endif } diff --git a/AppKit/Platform/DOM/CPPlatform.j b/AppKit/Platform/DOM/CPPlatform.j index 9b287120d..0ab47058d 100644 --- a/AppKit/Platform/DOM/CPPlatform.j +++ b/AppKit/Platform/DOM/CPPlatform.j @@ -48,10 +48,21 @@ var screenNeedsInitialization = NO, document.documentElement.style.overflow = "hidden"; if ([CPPlatform isBrowser]) + { + // This differ from cocoa, where shouldTerminate is called in the method terminate of CPApp + // Cappuccino acts like this because we can not close a window openend by the user with a script (so not possible in terminate), and we can only prevent the action in the method onbeforeunload in js. + window.onbeforeunload = function() + { + if ([CPApp _sendDelegateApplicationShouldTerminate] != CPTerminateNow) + return [CPApp _sendDelegateApplicationShouldTerminateMessage]; + }; + window.onunload = function() { + [self closeAllPlatformWindows]; [CPApp terminate:nil]; }; + } } + (BOOL)isBrowser @@ -138,4 +149,18 @@ var screenNeedsInitialization = NO, object:self]; } ++ (void)closeAllPlatformWindows +{ + var platformWindows = [CPPlatformWindow visiblePlatformWindows], + primaryPlatformWindow = [CPPlatformWindow primaryPlatformWindow], + platformWindowEnumerator = [platformWindows objectEnumerator], + platformWindow = nil; + + while ((platformWindow = [platformWindowEnumerator nextObject]) !== nil) + { + if (platformWindow != primaryPlatformWindow) + [platformWindow orderOut:self]; + } +} + @end diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 3cab0b5b9..e96a5708c 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -127,6 +127,7 @@ @import "CPText.j" @import "CPWindow_Constants.j" +@class CPApplication @class CPDragServer @class _CPToolTip @@ -202,6 +203,7 @@ var ModifierKeyCodes = [ var resizeTimer = nil; var PreventScroll = true; +var blurTimer = nil; _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotification"; @@ -363,6 +365,7 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _DOMBodyElement.style["-khtml-user-select"] = "none"; _DOMBodyElement.webkitTouchCallout = "none"; + _DOMBodyElement.style[CPBrowserStyleProperty(@"user-select")] = @"none"; [self createDOMElements]; [self _addLayers]; @@ -396,7 +399,15 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio touchEventSelector = @selector(touchEvent:), touchEventImplementation = class_getMethodImplementation(theClass, touchEventSelector), - touchEventCallback = function (anEvent) { touchEventImplementation(self, nil, anEvent); }; + touchEventCallback = function (anEvent) { touchEventImplementation(self, nil, anEvent); }, + + onFocusEventSelector = @selector(focusEvent:), + onFocusEventImplementation = class_getMethodImplementation(theClass, onFocusEventSelector), + onFocusEventCallback = function (anEvent) { onFocusEventImplementation(self, nil, anEvent); }, + + onBlurEventSelector = @selector(blurEvent:), + onBlurEventImplementation = class_getMethodImplementation(theClass, onBlurEventSelector), + onBlurEventCallback = function (anEvent) { onBlurEventImplementation(self, nil, anEvent); }; if (theDocument.addEventListener) { @@ -430,10 +441,14 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _DOMWindow.addEventListener("resize", resizeEventCallback, NO); + _DOMWindow.addEventListener("blur", onBlurEventCallback, NO); + _DOMWindow.addEventListener("focus", onFocusEventCallback, NO); + _DOMWindow.addEventListener("unload", function() { _DOMWindow.removeEventListener("unload", arguments.callee, NO); + [self blurEvent:nil]; [self _notifyPlatformWindowWillClose]; [self updateFromNativeContentRect]; [self _removeLayers]; @@ -453,6 +468,9 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _DOMWindow.removeEventListener("resize", resizeEventCallback, NO); + _DOMWindow.removeEventListener("blur", onBlurEventCallback, NO); + _DOMWindow.removeEventListener("focus", onFocusEventCallback, NO); + //FIXME: does firefox really need a different value? _DOMWindow.removeEventListener("DOMMouseScroll", scrollEventCallback, NO); _DOMWindow.removeEventListener("wheel", scrollEventCallback, NO); @@ -479,6 +497,9 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _DOMWindow.attachEvent("onresize", resizeEventCallback); + _DOMWindow.attachEvent("onfocus", onFocusEventCallback); + _DOMWindow.attachEvent("onblur", onBlurEventCallback); + _DOMWindow.onmousewheel = scrollEventCallback; theDocument.onmousewheel = scrollEventCallback; @@ -489,6 +510,7 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio { _DOMWindow.detachEvent("unload", arguments.callee); + [self blurEvent:nil]; [self _notifyPlatformWindowWillClose]; [self updateFromNativeContentRect]; [self _removeLayers]; @@ -505,7 +527,11 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _DOMWindow.detachEvent("onresize", resizeEventCallback); + _DOMWindow.detachEvent("onfocus", onBlurEventCallback); + _DOMWindow.detachEvent("onblur", onFocusEventCallback); + _DOMWindow.onmousewheel = NULL; + theDocument.onmousewheel = NULL; _DOMBodyElement.ondrag = NULL; @@ -545,7 +571,7 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio [PlatformWindows addObject:self]; // FIXME: cpSetFrame? - _DOMWindow.document.write(''); + _DOMWindow.document.write(''); _DOMWindow.document.close(); if (self != [CPPlatformWindow primaryPlatformWindow]) @@ -1031,6 +1057,96 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _shouldUpdateContentRect = YES; } +/*! + @ignore +*/ +- (void)blurEvent:(DOMEvent)aDOMEvent +{ + if ([CPApp keyWindow] == _currentKeyWindow) + [_currentKeyWindow resignKeyWindow]; + + if ([CPApp mainWindow] == _currentMainWindow) + [_currentMainWindow resignMainWindow]; + + _previousKeyWindow = aDOMEvent ? _currentKeyWindow : nil; + _previousMainWindow = aDOMEvent ? _currentMainWindow : nil; + + [blurTimer invalidate]; + blurTimer = [CPTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(_blurEventTimer:) userInfo:nil repeats:NO]; +} + +/*! + @ignore +*/ +- (void)_blurEventTimer:(CPTimer)aTimer +{ + if (![CPApp mainWindow]) + [[CPApplication sharedApplication] deactivate]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +} + +/*! + @ignore +*/ +- (void)focusEvent:(DOMEvent)aDOMEvent +{ + [blurTimer invalidate]; + [CPApp activateIgnoringOtherApps:YES]; + + var keyWindow = _previousKeyWindow; + + if (!keyWindow) + keyWindow = [[[_windowLayers objectForKey:[_windowLevels firstObject]] orderedWindows] firstObject]; + + if (!keyWindow) + return; + + [self _makeKeyWindow:keyWindow]; + + if ([keyWindow isKeyWindow] && ([keyWindow firstResponder] === keyWindow || ![keyWindow firstResponder])) + [keyWindow makeFirstResponder:[keyWindow initialFirstResponder]]; + + [self _makeMainWindow:keyWindow]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + _previousKeyWindow = nil; + _previousMainWindow = nil; +} + +/*! + @ignore +*/ +- (void)_makeKeyWindow:(CPWindow)aWindow +{ + if ([CPApp keyWindow] === aWindow || ![aWindow canBecomeKeyWindow]) + return; + + [[CPApp keyWindow] resignKeyWindow]; + [aWindow becomeKeyWindow]; +} + +/*! + @ignore +*/ +- (void)_makeMainWindow:(CPWindow)aWindow +{ + // Sheets cannot be main. Their parent window becomes main. + if (aWindow._isSheet) + { + [self _makeMainWindow:aWindow._parentView]; + return; + } + + if ([CPApp mainWindow] === aWindow || ![aWindow canBecomeMainWindow]) + return; + + [[CPApp mainWindow] resignMainWindow]; + [aWindow becomeMainWindow]; +} + + - (void)touchEvent:(DOMEvent)aDOMEvent { if (aDOMEvent.touches && (aDOMEvent.touches.length == 1 || (aDOMEvent.touches.length == 0 && aDOMEvent.changedTouches.length == 1))) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index cbc2b0830..be6830a4c 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1243,8 +1243,8 @@ var themedButtonValues = nil, overrides = [ - [@"image-search-left-margin", 5], - [@"image-cancel-right-margin", 5], + [@"image-search-inset", CGInsetMake(0, 0, 0, 5)], + [@"image-cancel-inset", CGInsetMake(0, 5, 0, 0)], [@"image-search", imageSearch], [@"image-find", imageFind], @@ -1255,15 +1255,15 @@ var themedButtonValues = nil, [@"image-find", smallImageFind, CPThemeStateControlSizeSmall], [@"image-cancel", smallImageCancel, CPThemeStateControlSizeSmall], [@"image-cancel-pressed", smallImageCancelPressed, CPThemeStateControlSizeSmall], - [@"image-search-left-margin", 8, CPThemeStateControlSizeSmall], - [@"image-cancel-right-margin", 8, CPThemeStateControlSizeSmall], + [@"image-search-inset", CGInsetMake(0, 0, 0, 8), CPThemeStateControlSizeSmall], + [@"image-cancel-inset", CGInsetMake(0, 8, 0, 0), CPThemeStateControlSizeSmall], [@"image-search", miniImageSearch, CPThemeStateControlSizeMini], [@"image-find", miniImageFind, CPThemeStateControlSizeMini], [@"image-cancel", miniImageCancel, CPThemeStateControlSizeMini], [@"image-cancel-pressed", miniImageCancelPressed, CPThemeStateControlSizeMini], - [@"image-search-left-margin", 8, CPThemeStateControlSizeMini], - [@"image-cancel-right-margin", 8, CPThemeStateControlSizeMini], + [@"image-search-inset", CGInsetMake(0, 0, 0, 8), CPThemeStateControlSizeMini], + [@"image-cancel-inset", CGInsetMake(0, 8, 0, 0), CPThemeStateControlSizeMini], ]; [self registerThemeValues:overrides forView:searchField inherit:themedRoundedTextFieldValues]; @@ -2999,6 +2999,24 @@ var themedButtonValues = nil, return progressBar; } ++ (CPProgressIndicator)themedCircularProgressIndicator +{ + var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; + [progressBar setStyle:CPProgressIndicatorSpinningStyle]; + [progressBar setIndeterminate:NO]; + + var themeValues = + [ + [@"circular-border-color", [CPColor colorWithHexString:@"C7C7C7"]], + [@"circular-border-size", 1], + [@"circular-color", [CPColor colorWithHexString:@"89B5CD"]] + ]; + + [self registerThemeValues:themeValues forView:progressBar]; + + return progressBar; +} + + (CPBox)themedBox { var box = [[CPBox alloc] initWithFrame:CGRectMake(0,0,100,100)], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index 335d4aa7c..140ebe208 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -688,7 +688,8 @@ var themedButtonValues = nil, [@"text-color", [CPColor blackColor], [CPThemeStateTableDataView, CPThemeStateSelectedDataView, CPThemeStateEditable, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], [@"content-inset", CGInsetMake(7.0, 7.0, 5.0, 10.0), [CPThemeStateTableDataView, CPThemeStateEditable]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize], [CPThemeStateTableDataView, CPThemeStateEditing]], - [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), [CPThemeStateTableDataView, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(-2.0, -2.0, -2.0, -2.0), [CPThemeStateTableDataView, CPThemeStateEditable, CPThemeStateEditing]], + [@"bezel-inset", CGInsetMake(1.0, 1.0, 1.0, 1.0), [CPThemeStateTableDataView, CPThemeStateEditable]], [@"text-color", [CPColor colorWithCalibratedWhite:125.0 / 255.0 alpha:1.0], [CPThemeStateTableDataView, CPThemeStateGroupRow]], [@"text-color", [CPColor whiteColor], [CPThemeStateTableDataView, CPThemeStateGroupRow, CPThemeStateSelectedDataView, CPThemeStateFirstResponder, CPThemeStateKeyWindow]], @@ -824,8 +825,8 @@ var themedButtonValues = nil, overrides = [ - [@"image-search-left-margin", 5], - [@"image-cancel-right-margin", 5], + [@"image-search-inset", CGInsetMake(0, 0, 0, 5)], + [@"image-cancel-inset", CGInsetMake(0, 5, 0, 0)], [@"image-search", imageSearch], [@"image-find", imageFind], @@ -2499,6 +2500,24 @@ var themedButtonValues = nil, return progressBar; } ++ (CPProgressIndicator)themedCircularProgressIndicator +{ + var progressBar = [[CPProgressIndicator alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; + [progressBar setStyle:CPProgressIndicatorSpinningStyle]; + [progressBar setIndeterminate:NO]; + + var themeValues = + [ + [@"circular-border-color", [CPColor colorWithHexString:@"A0A0A0"]], + [@"circular-border-size", 1], + [@"circular-color", [CPColor colorWithHexString:@"5982DA"]] + ]; + + [self registerThemeValues:themeValues forView:progressBar]; + + return progressBar; +} + + (CPBox)themedBox { var box = [[CPBox alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 7a1f5edcc..055611e98 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -141,7 +141,12 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (_appearance === anAppearance) return; - [_windowView setAppearance:anAppearance]; + _appearance = anAppearance; + + var appearanceName = _appearance == CPPopoverAppearanceMinimal ? CPAppearanceNameVibrantLight : CPAppearanceNameVibrantDark, + viewAppearance = [CPAppearance appearanceNamed:appearanceName]; + + [_windowView setAppearance:viewAppearance]; } - (void)setStyleMask:(unsigned)aStyleMask @@ -548,29 +553,36 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, // Now set up the pop-in to normal size transition. // Because we are watching the -webkit-transform, it will occur now. - [self setCSS3Property:@"Transform" value:@"scale(1)"]; - [self setCSS3Property:@"Transition" value:CPBrowserCSSProperty('transform') + @" 50ms linear"]; - _transitionCompleteFunction = function() + window.setTimeout(function() { + [self setCSS3Property:@"Transform" value:@"scale(1)"]; + [self setCSS3Property:@"Transition" value:CPBrowserCSSProperty('transform') + @" 50ms linear"]; + + _transitionCompleteFunction = function() + { #if PLATFORM(DOM) - _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), _transitionCompleteFunction, YES); + _DOMElement.removeEventListener(CPBrowserStyleProperty('transitionend'), _transitionCompleteFunction, YES); - // Make sure to clear these properties when the animation is done. Without this, - // the window becomes blurry in Chrome, presumably because the browser composits - // a layer with a transform differently even when it's an identity transform. - [self setCSS3Property:@"Transform" value:nil]; - [self setCSS3Property:@"TransformOrigin" value:nil]; - [self setCSS3Property:@"Transition" value:nil]; + // Make sure to clear these properties when the animation is done. Without this, + // the window becomes blurry in Chrome, presumably because the browser composits + // a layer with a transform differently even when it's an identity transform. + [self setCSS3Property:@"Transform" value:nil]; + [self setCSS3Property:@"TransformOrigin" value:nil]; + [self setCSS3Property:@"Transition" value:nil]; #endif - _isOpening = NO; + _isOpening = NO; - [_delegate _popoverWindowDidShow]; - } + [_delegate _popoverWindowDidShow]; + } #if PLATFORM(DOM) - _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), _transitionCompleteFunction, YES); + _DOMElement.addEventListener(CPBrowserStyleProperty('transitionend'), _transitionCompleteFunction, YES); #endif + }, 0); // There are some weird random conditions happening in Chrome 44. If we don't put a timeout to 0 for the end of + // the transition, the popover is blinking. It happens on Opera as well... + // When the condition is met, the popover will lag a bit when opening...nothing crazy ;) + // An issue has been opened here : https://code.google.com/p/chromium/issues/detail?id=523044&thanks=523044&ts=1440095724 }; #if PLATFORM(DOM) @@ -668,6 +680,17 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [_delegate _popoverWindowDidClose]; } +/*! + @ignore + Needed to be ignored to close a popover when a platform is closed. + Because the animation, the popover is not properly closed. +*/ +- (void)_didReceivePlatformWindowWillCloseNotification:(CPNotification)aNotification +{ + [super _didReceivePlatformWindowWillCloseNotification:aNotification]; + [self _orderOutRecursively:YES]; +} + #pragma mark - #pragma mark Private @@ -715,7 +738,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, // Consider clicks in child windows to be "inside". This keeps a transient popover from // closing if e.g. the window containing the menu of a token field is clicked. - if (mouseWindow === self || [mouseWindow _hasAncestorWindow:self] || ![self _hasOnlyTransientChild:self]) + if (mouseWindow === self || [mouseWindow _hasAncestorWindow:self] || ![self _hasOnlyTransientChild:self] || [mouseWindow platformWindow] != [self platformWindow]) { [self _trapNextMouseDown]; } diff --git a/CommonJS/bin/press b/CommonJS/bin/press index c4e6b5571..b89bb49d4 100755 --- a/CommonJS/bin/press +++ b/CommonJS/bin/press @@ -366,23 +366,38 @@ function pressEnvironment(rootPath, outputFiles, environment, options) { return {executable:includedBytes, data:dataBytes, mhtml:mhtmlBytes}; } -function pngcrushDirectory(directory) { - var directoryPath = FILE.path(directory); - var pngs = directoryPath.glob("**/*.png"); +function pngcrushDirectory(directory) +{ + var directoryPath = FILE.path(directory), + pngs = directoryPath.glob("**/*.png"); system.stderr.print("Running pngcrush on " + pngs.length + " pngs:"); - pngs.forEach(function(dstPath) { + pngs.forEach(function(dstPath) + { var tmpPath = FILE.path(dstPath+".tmp"); - var p = OS.popen(["pngcrush", "-rem", "alla", "-reduce", /*"-brute",*/ dstPath, tmpPath]); - if (p.wait()) { - CPLog.warn("pngcrush failed. Ensure it's installed and on your PATH."); + try + { + var p = OS.popen(["pngcrush", "-rem", "alla", "-reduce", /*"-brute",*/ dstPath, tmpPath]); + + if (p.wait()) + { + CPLog.warn("pngcrush failed. Ensure it's installed and on your PATH."); + } + else + { + FILE.move(tmpPath, dstPath); + system.stderr.write(".").flush(); + } } - else { - FILE.move(tmpPath, dstPath); - system.stderr.write(".").flush(); + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); } }); + system.stderr.print(""); } diff --git a/CommonJS/lib/cappuccino/fontinfo.j b/CommonJS/lib/cappuccino/fontinfo.j index beff36b9e..4fb9385a0 100644 --- a/CommonJS/lib/cappuccino/fontinfo.j +++ b/CommonJS/lib/cappuccino/fontinfo.j @@ -3,10 +3,20 @@ var OS = require("os"); exports.fontinfo = function(name, size) { - var p = OS.popen(["fontinfo", "-n", name, size || 12]); + var result; - if (p.wait() === 0) - return JSON.parse(p.stdout.read()); - else - return null; + try + { + var p = OS.popen(["fontinfo", "-n", name, size || 12]); + if (p.wait() === 0) + result = p.stdout.read(); + } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); + } + + return result ? JSON.parse(result) : null; }; diff --git a/CommonJS/lib/cappuccino/imagesize.j b/CommonJS/lib/cappuccino/imagesize.j index c6e534bfa..2d88f8085 100644 --- a/CommonJS/lib/cappuccino/imagesize.j +++ b/CommonJS/lib/cappuccino/imagesize.j @@ -3,10 +3,20 @@ var OS = require("os"); exports.imagesize = function(path) { - var p = OS.popen(["imagesize", "-n", path]); + var result; - if (p.wait() === 0) - return JSON.parse(p.stdout.read()); - else - return null; + try + { + var p = OS.popen(["imagesize", "-n", path]); + if (p.wait() === 0) + result = p.stdout.read(); + } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); + } + + return result ? JSON.parse(result) : null; }; diff --git a/Foundation/CPArray/_CPArray.j b/Foundation/CPArray/_CPArray.j index ba2e0cd9f..5ba2124ba 100755 --- a/Foundation/CPArray/_CPArray.j +++ b/Foundation/CPArray/_CPArray.j @@ -208,6 +208,14 @@ var concat = Array.prototype.concat, _CPRaiseInvalidAbstractInvocation(self, _cmd); } +/*! +Returns a hash for the object. Unlike Cocoa, the hash value does not take content into account, so two arrays with the same content (\c isEqual: === YES) will not generate the same hash. +*/ +- (unsigned)hash +{ + return [self UID]; +} + /*! Returns the first object in the array. If the array is empty, returns \c nil */ diff --git a/Foundation/CPArray/_CPJavaScriptArray.j b/Foundation/CPArray/_CPJavaScriptArray.j index 5589e75b0..0246790dd 100644 --- a/Foundation/CPArray/_CPJavaScriptArray.j +++ b/Foundation/CPArray/_CPJavaScriptArray.j @@ -196,7 +196,8 @@ var concat = Array.prototype.concat, } else - for (; index < count; ++index) { + for (; index < count; ++index) + { var receiver = self[index]; receiver == nil ? nil : receiver.isa.objj_msgSend0(receiver, aSelector); } diff --git a/Foundation/CPDecimalNumber.j b/Foundation/CPDecimalNumber.j index 7221cd2e5..f6d88a1fa 100644 --- a/Foundation/CPDecimalNumber.j +++ b/Foundation/CPDecimalNumber.j @@ -26,7 +26,8 @@ @import "CPString.j" // The default global behavior class, created lazily -var CPDefaultDcmHandler = nil; +var CPDefaultDcmHandler = nil, + CPDecimalNumberUIDs = new CFMutableDictionary(); /*! @class CPDecimalNumberHandler @@ -531,6 +532,20 @@ var CPDecimalNumberHandlerRoundingModeKey = @"CPDecimalNumberHandlerRoundi } // instance methods + +- (CPString)UID +{ + var UID = CPDecimalNumberUIDs.valueForKey(self); + + if (!UID) + { + UID = objj_generateObjectUID(); + CPDecimalNumberUIDs.setValueForKey(self, UID); + } + + return UID + ""; +} + /*! Returns a new CPDecimalNumber object with the result of the summation of the receiver object and \c decimalNumber. If overflow occurs then the diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index 9c673be0c..d06c4b9fa 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -26,10 +26,7 @@ @import "CPNull.j" @import "CPObject.j" -//FIXME: After release of 0.9.7 remove below variable -var CPDictionaryShowNilDeprecationMessage = YES, - - CPDictionaryMaxDescriptionRecursion = 10; +var CPDictionaryMaxDescriptionRecursion = 10; /*! @class CPDictionary @@ -238,28 +235,10 @@ var CPDictionaryShowNilDeprecationMessage = YES, key = keyArray[i]; if (value === nil) - { - CPDictionaryShowNilDeprecationMessage = NO; - CPLog.warn([CPString stringWithFormat:@"[%s %s] DEPRECATED: Attempt to insert nil object from objects[%d]", [self className], _cmd, i]); - - if (typeof(objj_backtrace_print) === "function") - objj_backtrace_print(CPLog.warn); - - // FIXME: After release of 0.9.7 change this block to: - // [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil object from objects[" + i + @"]"]; - } + [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil object from objects[" + i + @"]"]; if (key === nil) - { - CPDictionaryShowNilDeprecationMessage = NO; - CPLog.warn([CPString stringWithFormat:@"[%s %s] DEPRECATED: Attempt to insert nil key from keys[%d]", [self className], _cmd, i]); - - if (typeof(objj_backtrace_print) === "function") - objj_backtrace_print(CPLog.warn); - - // FIXME: After release of 0.9.7 change this block to: - // [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil key from keys[" + i + @"]"]; - } + [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil key from keys[" + i + @"]"]; [self setObject:value forKey:key]; } @@ -302,28 +281,10 @@ var CPDictionaryShowNilDeprecationMessage = YES, key = arguments[index + 1]; if (value === nil) - { - CPDictionaryShowNilDeprecationMessage = NO; - CPLog.warn([CPString stringWithFormat:@"[%s %s] DEPRECATED: Attempt to insert nil object from objects[%d]", [self className], _cmd, (index / 2) - 1]); - - if (typeof(objj_backtrace_print) === "function") - objj_backtrace_print(CPLog.warn); - - // FIXME: After release of 0.9.7 change 3 lines above to this: - // [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil object from objects[" + ((index / 2) - 1) + @"]"]; - } + [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil object from objects[" + ((index / 2) - 1) + @"]"]; if (key === nil) - { - CPDictionaryShowNilDeprecationMessage = NO; - CPLog.warn([CPString stringWithFormat:@"[%s %s] DEPRECATED: Attempt to insert nil key from keys[%d]", [self className], _cmd, (index / 2) - 1]); - - if (typeof(objj_backtrace_print) === "function") - objj_backtrace_print(CPLog.warn); - - // FIXME: After release of 0.9.7 change 3 lines above to this: - // [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil key from keys[" + ((index / 2) - 1) + @"]"]; - } + [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil key from keys[" + ((index / 2) - 1) + @"]"]; [self setObject:value forKey:key]; } @@ -634,34 +595,11 @@ var CPDictionaryShowNilDeprecationMessage = YES, */ - (void)setObject:(id)anObject forKey:(id)aKey { - // FIXME: After release of 0.9.7, remove this test and leave the contents of its block - if (CPDictionaryShowNilDeprecationMessage) - { - if (aKey === nil) - { - CPLog.warn([CPString stringWithFormat:@"[%s %s] DEPRECATED: key cannot be nil", [self className], _cmd]); + if (aKey === nil) + [CPException raise:CPInvalidArgumentException reason:@"key cannot be nil"]; - if (typeof(objj_backtrace_print) === "function") - objj_backtrace_print(CPLog.warn); - - // FIXME: After release of 0.9.7 change this block to: - // [CPException raise:CPInvalidArgumentException reason:@"key cannot be nil"]; - } - - if (anObject === nil) - { - CPLog.warn([CPString stringWithFormat:@"[%s %s] DEPRECATED: object cannot be nil (key: %s)", [self className], _cmd, aKey]); - - if (typeof(objj_backtrace_print) === "function") - objj_backtrace_print(CPLog.warn); - - // FIXME: After release of 0.9.7 change this block to: - // [CPException raise:CPInvalidArgumentException reason:@"object cannot be nil (key: " + aKey + @")"]; - } - } - // FIXME: After release of 0.9.7 remove 2 lines below. - else - CPDictionaryShowNilDeprecationMessage = YES; + if (anObject === nil) + [CPException raise:CPInvalidArgumentException reason:@"object cannot be nil (key: " + aKey + @")"]; self.setValueForKey(aKey, anObject); } diff --git a/Foundation/CPPredicate/_CPPredicate.j b/Foundation/CPPredicate/_CPPredicate.j index 201bcccd0..56bfcd643 100644 --- a/Foundation/CPPredicate/_CPPredicate.j +++ b/Foundation/CPPredicate/_CPPredicate.j @@ -605,11 +605,11 @@ } if ([self scanPredicateKeyword:@"TRUE"] || [self scanPredicateKeyword:@"YES"]) { - return [CPExpression expressionForConstantValue:[CPNumber numberWithBool:YES]]; + return [CPExpression expressionForConstantValue:YES]; } if ([self scanPredicateKeyword:@"FALSE"] || [self scanPredicateKeyword:@"NO"]) { - return [CPExpression expressionForConstantValue:[CPNumber numberWithBool:NO]]; + return [CPExpression expressionForConstantValue:NO]; } if ([self scanPredicateKeyword:@"SELF"]) { diff --git a/Foundation/CPTimeZone.j b/Foundation/CPTimeZone.j index 4b4ba6c1b..d5e652234 100644 --- a/Foundation/CPTimeZone.j +++ b/Foundation/CPTimeZone.j @@ -266,7 +266,7 @@ var abbreviationDictionary, @"MST" : [@"Mountain Standard Time", @"MST", @"Mountain Daylight Time", @"MDT", @"Mountain Time", @"MT"], @"PHT" : [@"Philippine Standard Time", @"GMT+08:00", @"Philippine Summer Time", @"GMT+08:00", @"Philippine Standard Time", @"Philippines Time"], @"WET" : [@"Western European Standard Time", @"GMT", @"Western European Summer Time", @"GMT+01:00", @"Western European Time", @"Portugal Time (Lisbon)"] - }; + }; var date = [CPDate date], abbreviation = String(String(date).split("(")[1]).split(")")[0]; diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 5a4f09f26..cd195b04a 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -26,6 +26,16 @@ @import "CPURLRequest.j" @import "CPURLResponse.j" +@protocol CPURLConnectionDelegate + +- (void)connection:(CPURLConnection)anURLConnection didFailWithError:(CPException)anError; +- (void)connection:(CPURLConnection)anURLConnection didReceiveData:(CPString)aData; +- (void)connection:(CPURLConnection)anURLConnection didReceiveResponse:(CPString)aResponse; +- (void)connectionDidFinishLoading:(CPURLConnection)anURLConnection; +- (void)connectionDidReceiveAuthenticationChallenge:(CPURLConnection)anURLConnection; + +@end + @typedef HTTPRequest var CPURLConnectionDelegate = nil; @@ -76,16 +86,16 @@ var CPURLConnectionDelegate = nil; */ @implementation CPURLConnection : CPObject { - CPURLRequest _originalRequest @accessors(readonly, getter=originalRequest); - CPURLRequest _request @accessors(readonly, getter=currentRequest); - id _delegate; - BOOL _isCanceled; - BOOL _isLocalFileConnection; + CPURLRequest _originalRequest @accessors(readonly, getter=originalRequest); + CPURLRequest _request @accessors(readonly, getter=currentRequest); + id _delegate; + BOOL _isCanceled; + BOOL _isLocalFileConnection; - HTTPRequest _HTTPRequest; + HTTPRequest _HTTPRequest; } -+ (void)setClassDelegate:(id)delegate ++ (void)setClassDelegate:(id )delegate { CPURLConnectionDelegate = delegate; } @@ -145,7 +155,7 @@ var CPURLConnectionDelegate = nil; @param shouldStartImmediately whether the \c -start method should be called from here @return the initialized url connection */ -- (id)initWithRequest:(CPURLRequest)aRequest delegate:(id)aDelegate startImmediately:(BOOL)shouldStartImmediately +- (id)initWithRequest:(CPURLRequest)aRequest delegate:(id )aDelegate startImmediately:(BOOL)shouldStartImmediately { self = [super init]; @@ -166,6 +176,7 @@ var CPURLConnectionDelegate = nil; (window.location.protocol === "file:" || window.location.protocol === "app:")); _HTTPRequest = new CFHTTPRequest(); + _HTTPRequest.setTimeout([aRequest timeoutInterval] * 1000); _HTTPRequest.setWithCredentials([aRequest withCredentials]); if (shouldStartImmediately) @@ -175,7 +186,7 @@ var CPURLConnectionDelegate = nil; return self; } -- (id)initWithRequest:(CPURLRequest)aRequest delegate:(id)aDelegate +- (id)initWithRequest:(CPURLRequest)aRequest delegate:(id )aDelegate { return [self initWithRequest:aRequest delegate:aDelegate startImmediately:YES]; } @@ -200,6 +211,7 @@ var CPURLConnectionDelegate = nil; _HTTPRequest.open([_request HTTPMethod], [[_request URL] absoluteString], YES); _HTTPRequest.onreadystatechange = function() { [self _readyStateDidChange]; }; + _HTTPRequest.ontimeout = function() { [self _didTimeout]; }; var fields = [_request allHTTPHeaderFields], key = nil, @@ -212,11 +224,16 @@ var CPURLConnectionDelegate = nil; } catch (anException) { - if ([_delegate respondsToSelector:@selector(connection:didFailWithError:)]) - [_delegate connection:self didFailWithError:anException]; + [self _sendDelegateDidFailWithError:anException]; } } +- (void)_sendDelegateDidFailWithError:(CPException)anException +{ + if ([_delegate respondsToSelector:@selector(connection:didFailWithError:)]) + [_delegate connection:self didFailWithError:anException]; +} + /* Cancels the current request. */ @@ -239,10 +256,22 @@ var CPURLConnectionDelegate = nil; return _isLocalFileConnection; } +/*! + @ignore +*/ +- (void)_didTimeout +{ + var exception = [CPException exceptionWithName:@"Timeout exception" + reason:"The request timed out." + userInfo:@{}]; + + [self _sendDelegateDidFailWithError:exception]; +} + /* @ignore */ - (void)_readyStateDidChange { - if (_HTTPRequest.readyState() === CFHTTPRequest.CompleteState) + if (_HTTPRequest.readyState() === CFHTTPRequest.CompleteState && !_HTTPRequest.isTimeoutRequest()) { var statusCode = _HTTPRequest.status(), URL = [_request URL]; diff --git a/Foundation/CPURLRequest.j b/Foundation/CPURLRequest.j index 8d6a39e3b..9c0ad1b46 100644 --- a/Foundation/CPURLRequest.j +++ b/Foundation/CPURLRequest.j @@ -25,6 +25,12 @@ @import "CPString.j" @import "CPURL.j" +@typedef CPURLRequestCachePolicy +CPURLRequestUseProtocolCachePolicy = 0; +CPURLRequestReloadIgnoringLocalCacheData = 1; +CPURLRequestReturnCacheDataElseLoad = 2; +CPURLRequestReturnCacheDataDontLoad = 3; + /*! @class CPURLRequest @ingroup foundation @@ -35,14 +41,16 @@ */ @implementation CPURLRequest : CPObject { - CPURL _URL @accessors(property=URL); + CPURL _URL @accessors(property=URL); // FIXME: this should be CPData - CPString _HTTPBody @accessors(property=HTTPBody); - CPString _HTTPMethod @accessors(property=HTTPMethod); - BOOL _withCredentials @accessors(property=withCredentials); + CPString _HTTPBody @accessors(property=HTTPBody); + CPString _HTTPMethod @accessors(property=HTTPMethod); + BOOL _withCredentials @accessors(property=withCredentials); - CPDictionary _HTTPHeaderFields @accessors(readonly, getter=allHTTPHeaderFields); + CPDictionary _HTTPHeaderFields @accessors(readonly, getter=allHTTPHeaderFields); + CPTimeInterval _timeoutInterval @accessors(readonly, getter=timeoutInterval); + CPURLRequestCachePolicy _cachePolicy @accessors(readonly, getter=cachePolicy); } /*! @@ -55,6 +63,18 @@ return [[CPURLRequest alloc] initWithURL:aURL]; } +/*! + Creates a request with a specified URL, cachePolicy and timeoutInterval + @param aURL the URL of the request + @param aCachePolicy the cache policy of the request + @param aTimeoutInterval the timeoutInterval of the request + @return a CPURLRequest +*/ ++ (id)requestWithURL:(CPURL)anURL cachePolicy:(CPURLRequestCachePolicy)aCachePolicy timeoutInterval:(CPTimeInterval)aTimeoutInterval +{ + return [[CPURLRequest alloc] initWithURL:anURL cachePolicy:aCachePolicy timeoutInterval:aTimeoutInterval]; +} + /*! Equal to `[receiver initWithURL:nil]`. */ @@ -63,6 +83,25 @@ return [self initWithURL:nil]; } +/*! + Initializes the request with a URL. This is the designated initializer. + + @param aURL the url to set + @param aCachePolicy the cache policy of the request + @param aTimeoutInterval the timeoutInterval of the request + @return the initialized CPURLRequest +*/ +- (id)initWithURL:(CPURL)anURL cachePolicy:(CPURLRequestCachePolicy)aCachePolicy timeoutInterval:(CPTimeInterval)aTimeoutInterval +{ + if (self = [self initWithURL:anURL]) + { + _cachePolicy = aCachePolicy; + _timeoutInterval = aTimeoutInterval; + } + + return self; +} + /*! Initializes the request with a URL. This is the designated initializer. @@ -71,9 +110,7 @@ */ - (id)initWithURL:(CPURL)aURL { - self = [super init]; - - if (self) + if (self = [super init]) { [self setURL:aURL]; @@ -81,9 +118,34 @@ _HTTPMethod = @"GET"; _HTTPHeaderFields = @{}; _withCredentials = NO; + _timeoutInterval = 60.0; + _cachePolicy = CPURLRequestUseProtocolCachePolicy; [self setValue:"Thu, 01 Jan 1970 00:00:00 GMT" forHTTPHeaderField:"If-Modified-Since"]; - [self setValue:"no-cache" forHTTPHeaderField:"Cache-Control"]; + + switch (_cachePolicy) + { + case CPURLRequestUseProtocolCachePolicy: + // TODO: implement everything about cache... + [self setValue:"no-cache" forHTTPHeaderField:"Cache-Control"]; + break; + + case CPURLRequestReturnCacheDataElseLoad: + [self setValue:"max-stale=31536000" forHTTPHeaderField:"Cache-Control"]; + break; + + case CPURLRequestReturnCacheDataDontLoad: + [self setValue:"only-if-cached" forHTTPHeaderField:"Cache-Control"]; + break; + + case CPURLRequestReloadIgnoringLocalCacheData: + [self setValue:"no-cache" forHTTPHeaderField:"Cache-Control"]; + break; + + default: + [self setValue:"no-cache" forHTTPHeaderField:"Cache-Control"]; + } + [self setValue:"XMLHttpRequest" forHTTPHeaderField:"X-Requested-With"]; } diff --git a/Foundation/CPUserNotification.j b/Foundation/CPUserNotification.j new file mode 100644 index 000000000..91c41a53e --- /dev/null +++ b/Foundation/CPUserNotification.j @@ -0,0 +1,109 @@ +/* + * CPUserNotification.j + * Foundation + * + * Created by Alexandre Wilhelm. + * Copyright 2015, 280 North, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import "CPAttributedString.j" +@import "CPArray.j" +@import "CPDate.j" +@import "CPDictionary.j" +@import "CPObject.j" +@import "CPTimeZone.j" + +// We need something from the AppKit in Foundation ??? +@class CPImage + +@typedef CPUserNotificationAction +@typedef CPUserNotificationActivationType + +/*! + @global CPUserNotificationActivationType + @group CPUserNotificationActivationType + The user did not interact with the notification alert. +*/ +CPUserNotificationActivationTypeNone = 0; + +/*! + @global CPUserNotificationActivationType + @group CPUserNotificationActivationType + The user clicked on the contents of the notification alert. +*/ +CPUserNotificationActivationTypeContentsClicked = 1; + +/*! + @global CPUserNotificationActivationType + @group CPUserNotificationActivationType + The user clicked on the action button of the notification alert. +*/ +CPUserNotificationActivationTypeActionButtonClicked = 2; + +/*! + @global CPUserNotificationActivationType + @group CPUserNotificationActivationType + The user replied to the notification. +*/ +CPUserNotificationActivationTypeReplied = 3, + +/*! + @global CPUserNotificationActivationType + @group CPUserNotificationActivationType + The user clicked on the additional action button of the notification alert. +*/ +CPUserNotificationActivationTypeAdditionalActionClicked = 4; + +/*! + @class CPUserNotification + @ingroup foundation + + @brief The CPUserNotification class is used to configure a notification that is scheduled for display by the UserNotificationCenter class. +*/ +@implementation CPUserNotification : CPObject +{ + BOOL _presented @accessors(getter=isPresented); + BOOL _remote @accessors(getter=isRemote); + CPDate _actualDeliveryDate @accessors(getter=actualDeliveryDate); + CPDate _deliveryDate @accessors(property=deliveryDate); + CPDictionary _userInfo @accessors(property=userInfo); + CPImage _contentImage @accessors(property=contentImage); + CPString _identifier @accessors(property=identifier); + CPString _informativeText @accessors(property=informativeText); + CPString _title @accessors(property=title); + CPTimeInterval _deliveryRepeatInterval @accessors(property=deliveryRepeatInterval); + CPTimeZone _deliveryTimeZone @accessors(property=deliveryTimeZone); + CPUserNotificationActivationType _activationType @accessors(getter=activationType); +} + + +#pragma mark - +#pragma mark Creating an user notification + +- (id)init +{ + self = [super init]; + + if (self) + { + _identifier = [self UID]; + } + + return self +} + +@end \ No newline at end of file diff --git a/Foundation/CPUserNotificationCenter.j b/Foundation/CPUserNotificationCenter.j new file mode 100644 index 000000000..34800d940 --- /dev/null +++ b/Foundation/CPUserNotificationCenter.j @@ -0,0 +1,293 @@ +/* + * CPUserNotificationCenter.j + * Foundation + * + * Created by Alexandre Wilhelm. + * Copyright 2015, 280 North, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import "CPArray.j" +@import "CPObject.j" +@import "CPTimer.j" +@import "CPUserNotification.j" + +@protocol CPUserNotificationCenterDelegate + +@optional +- (BOOL)userNotificationCenter:(CPUserNotificationCenter)center shouldPresentNotification:(CPUserNotification)notification; +- (void)userNotificationCenter:(CPUserNotificationCenter)center didDeliverNotification:(CPUserNotification)notification; +- (void)userNotificationCenter:(CPUserNotificationCenter)center didActivateNotification:(CPUserNotification)notification; + +@end + +// Remove compiling warnings +@class Notification + +@global CPApp + +var CPUserNotificationCenterDelegate_userNotificationCenter_shouldPresentNotification_ = 1 << 0, + CPUserNotificationCenterDelegate_userNotificationCenter_didDeliverNotification_ = 1 << 1, + CPUserNotificationCenterDelegate_userNotificationCenter_didActivateNotification_ = 1 << 2; + +var CPUserNotificationDefaultCenter = nil; + +/*! + @class CPUserNotificationCenter + @ingroup foundation + + @brief The CPUserNotificationCenter class delivers user notifications to the user from applications or helper applications. +*/ +@implementation CPUserNotificationCenter : CPObject +{ + CPArray _deliveredNotifications @accessors(property=deliveredNotifications); + CPArray _scheduledNotifications @accessors(property=scheduledNotifications); + id _delegate; + + CPInteger _implementedDelegateMethods; + CPMutableDictionary _timersForUserNotification; +} + + +#pragma mark - +#pragma mark Creating Default User Notification Center + +/*! + Returns the user's notification center +*/ ++ (CPNotificationCenter)defaultUserNotificationCenter +{ + if (!CPUserNotificationDefaultCenter) + CPUserNotificationDefaultCenter = [[CPUserNotificationCenter alloc] init]; + + return CPUserNotificationDefaultCenter; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + _deliveredNotifications = []; + _scheduledNotifications = []; + _timersForUserNotification = @{}; + } + + return self; +} + + +#pragma mark - +#pragma mark Getting and Setting the Delegate + +- (void)setDelegate:(id )aDelegate +{ + if (_delegate === aDelegate) + return; + + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if ([_delegate respondsToSelector:@selector(userNotificationCenter:shouldPresentNotification:)]) + _implementedDelegateMethods |= CPUserNotificationCenterDelegate_userNotificationCenter_shouldPresentNotification_; + + if ([_delegate respondsToSelector:@selector(userNotificationCenter:didDeliverNotification:)]) + _implementedDelegateMethods |= CPUserNotificationCenterDelegate_userNotificationCenter_didDeliverNotification_; + + if ([_delegate respondsToSelector:@selector(userNotificationCenter:didActivateNotification:)]) + _implementedDelegateMethods |= CPUserNotificationCenterDelegate_userNotificationCenter_didActivateNotification_; +} + + +#pragma mark - +#pragma mark Managing the Scheduled Notification Queue + +/*! + Schedules the given user notification + @param anUserNotification the user notification +*/ +- (void)scheduleNotification:(CPUserNotification)anUserNotification +{ + var scheduledDate = [[anUserNotification deliveryDate] copy]; + [scheduledDate _dateWithTimeZone:[anUserNotification deliveryTimeZone]]; + + var timer = [[CPTimer alloc] initWithFireDate:scheduledDate + interval:[anUserNotification deliveryRepeatInterval] + target:self + selector:@selector(_scheduledUserNotificationTimerDidFire:) + userInfo:anUserNotification + repeats:([anUserNotification deliveryRepeatInterval] ? YES : NO)]; + + [_scheduledNotifications addObject:anUserNotification]; + _timersForUserNotification[[anUserNotification UID]] = timer; + + [[CPRunLoop currentRunLoop] addTimer:timer forMode:CPDefaultRunLoopMode]; +} + +- (void)_scheduledUserNotificationTimerDidFire:(CPTimer)aTimer +{ + [self deliverNotification:[aTimer userInfo]]; +} + +/*! + Removes the given user notification for the scheduled notifications. + @param anUserNotification the user notification +*/ +- (void)removeScheduledNotification:(CPUserNotification)anUserNotification +{ + if ([_scheduledNotifications indexOfObject:anUserNotification] != CPNotFound) + { + [_scheduledNotifications removeObject:anUserNotification]; + [_timersForUserNotification[[anUserNotification UID]] invalidate]; + delete _timersForUserNotification[[anUserNotification UID]]; + } +} + + +#pragma mark - +#pragma mark Managing the Delivered Notifications + +/*! + Deliver the given user notification + @param aNotification the user notification +*/ +- (void)deliverNotification:(CPUserNotification)aNotification +{ + [self _launchUserNotification:aNotification]; +} + +/*! + Remove a delivered user notification from the user notification center. + @param aNotification the user notification +*/ +- (void)removeDeliveredNotification:(CPUserNotification)aNotification +{ + [_deliveredNotifications removeObject:aNotification]; +} + +/*! + Remove all delivered user notifications from the user notification center. +*/ +- (void)removeAllDeliveredNotifications +{ + [_deliveredNotifications removeAllObjects]; +} + + +#pragma mark - +#pragma mark Permission Utilities + +- (void)_askPermissionForUserNotification:(CPUserNotification)anUserNotification +{ + Notification.requestPermission(function (permission) { + if (permission == "granted") + // We need to relaunch the notification if the permission are granted + [self _launchUserNotification:anUserNotification]; + }); +} + + +#pragma mark - +#pragma mark Notification Utilities + +- (void)_launchUserNotification:(CPUserNotification)anUserNotification +{ + // If the browser version is unsupported, remain silent. + if (!window || !'Notification' in window) + return; + + if (Notification.permission === 'default') + [self _askPermissionForUserNotification:anUserNotification]; + + if (Notification.permission === 'granted') + { + if (([self _delegateRespondsToShouldPresentNotification] && [self _sendDelegateShouldPresentNotification:anUserNotification]) + || ![CPApp isActive]) + { + var notification = new Notification( + [anUserNotification title], + { + 'body': [anUserNotification informativeText], + 'icon': [[anUserNotification contentImage] filename], + // ...prevent duplicate notifications + 'tag' : [anUserNotification identifier] + } + ); + + anUserNotification._presented = YES; + + notification.onclick = function () { + anUserNotification._activationType = CPUserNotificationActivationTypeContentsClicked; + [self _sendDelegateDidActivateNotification:anUserNotification]; + + // Remove the notification from Notification Center when clicked. + this.close(); + }; + + // Callback function when the notification is closed. + notification.onclose = function () { + + }; + } + else + { + anUserNotification._presented = NO; + } + + anUserNotification._activationType = CPUserNotificationActivationTypeNone; + anUserNotification._actualDeliveryDate = [CPDate date]; + [_deliveredNotifications addObject:anUserNotification]; + + if (![anUserNotification deliveryRepeatInterval]) + [self removeScheduledNotification:anUserNotification]; + + [self _sendDelegateDidDeliverNotification:anUserNotification]; + } +} + +@end + + +@implementation CPUserNotificationCenter (CPUserNotificationCenterDelegate) + +- (BOOL)_delegateRespondsToShouldPresentNotification +{ + return _implementedDelegateMethods & CPUserNotificationCenterDelegate_userNotificationCenter_shouldPresentNotification_; +} + +- (BOOL)_sendDelegateShouldPresentNotification:(CPUserNotification)aNotification +{ + return [_delegate userNotificationCenter:self shouldPresentNotification:aNotification]; +} + +- (void)_sendDelegateDidActivateNotification:(CPUserNotification)aNotification +{ + if (!(_implementedDelegateMethods & CPUserNotificationCenterDelegate_userNotificationCenter_didActivateNotification_)) + return; + + [_delegate userNotificationCenter:self didActivateNotification:aNotification]; +} + +- (void)_sendDelegateDidDeliverNotification:(CPUserNotification)aNotification +{ + if (!(_implementedDelegateMethods & CPUserNotificationCenterDelegate_userNotificationCenter_didDeliverNotification_)) + return; + + [_delegate userNotificationCenter:self didDeliverNotification:aNotification]; +} + +@end \ No newline at end of file diff --git a/Foundation/Foundation.j b/Foundation/Foundation.j index 3fcf5481f..c0865d410 100755 --- a/Foundation/Foundation.j +++ b/Foundation/Foundation.j @@ -78,6 +78,8 @@ @import "CPURLRequest.j" @import "CPURLResponse.j" @import "CPUserDefaults.j" +@import "CPUserNotification.j" +@import "CPUserNotificationCenter.j" @import "CPUserSessionManager.j" @import "CPValue.j" @import "CPValueTransformer.j" diff --git a/Jakefile b/Jakefile index 56a4e30aa..9bbc5ff57 100644 --- a/Jakefile +++ b/Jakefile @@ -128,12 +128,21 @@ function generateDocs(/* boolean */ noFrame) // If the Doxygen application is installed on Mac OS X, use that if (!doxygen && executableExists("mdfind")) { - var p = OS.popen(["mdfind", "kMDItemContentType == 'com.apple.application-bundle' && kMDItemCFBundleIdentifier == 'org.doxygen'"]); - if (p.wait() === 0) + try { - var doxygenApps = p.stdout.read().split("\n"); - if (doxygenApps[0]) - doxygen = FILE.join(doxygenApps[0], "Contents/Resources/doxygen"); + var p = OS.popen(["mdfind", "kMDItemContentType == 'com.apple.application-bundle' && kMDItemCFBundleIdentifier == 'org.doxygen'"]); + if (p.wait() === 0) + { + var doxygenApps = p.stdout.read().split("\n"); + if (doxygenApps[0]) + doxygen = FILE.join(doxygenApps[0], "Contents/Resources/doxygen"); + } + } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); } } diff --git a/Objective-J/CFHTTPRequest.js b/Objective-J/CFHTTPRequest.js index 37bdf61e8..eff9a49df 100644 --- a/Objective-J/CFHTTPRequest.js +++ b/Objective-J/CFHTTPRequest.js @@ -112,7 +112,13 @@ GLOBAL(CFHTTPRequest) = function() determineAndDispatchHTTPRequestEvents(self); }; + this._timeoutHandler = function() + { + dispatchTimeoutHTTPRequestEvents(self); + }; + this._nativeRequest.onreadystatechange = this._stateChangeHandler; + this._nativeRequest.ontimeout = this._timeoutHandler; if (CFHTTPRequest.AuthenticationDelegate !== nil) this._eventDispatcher.addEventListener("HTTP403", function() @@ -209,6 +215,16 @@ CFHTTPRequest.prototype.getResponseHeader = function(/*String*/ aHeader) return this._nativeRequest.getResponseHeader(aHeader); }; +CFHTTPRequest.prototype.setTimeout = function(/*int*/ aTimeout) +{ + this._nativeRequest.timeout = aTimeout; +}; + +CFHTTPRequest.prototype.getTimeout = function(/*int*/ aTimeout) +{ + return this._nativeRequest.timeout; +}; + CFHTTPRequest.prototype.getAllResponseHeaders = function() { return this._nativeRequest.getAllResponseHeaders(); @@ -235,7 +251,10 @@ CFHTTPRequest.prototype.send = function(/*Object*/ aBody) if (!this._isOpen) { delete this._nativeRequest.onreadystatechange; + delete this._nativeRequest.ontimeout; + this._nativeRequest.open(this._method, this._URL, this._async, this._user, this._password); + this._nativeRequest.ontimeout = this._timeoutHandler; this._nativeRequest.onreadystatechange = this._stateChangeHandler; } @@ -277,25 +296,35 @@ CFHTTPRequest.prototype.removeEventListener = function(/*String*/ anEventName, / this._eventDispatcher.removeEventListener(anEventName, anEventListener); }; -CFHTTPRequest.prototype.setWithCredentials = function(/*Boolean*/ willSendWithCredentials) +CFHTTPRequest.prototype.setWithCredentials = function(/*Boolean*/ willSendWithCredentials) { this._nativeRequest.withCredentials = willSendWithCredentials; }; -CFHTTPRequest.prototype.withCredentials = function() +CFHTTPRequest.prototype.withCredentials = function() { return this._nativeRequest.withCredentials; }; +CFHTTPRequest.prototype.isTimeoutRequest = function() +{ + // Can we consider that as a timeout ? + return !this.success() && !this._nativeRequest.response && !this._nativeRequest.responseText && !this._nativeRequest.responseType && !this._nativeRequest.responseURL && !this._nativeRequest.responseXML; +}; + +function dispatchTimeoutHTTPRequestEvents(/*CFHTTPRequest*/ aRequest) +{ + aRequest._eventDispatcher.dispatchEvent({ type:"timeout", request:aRequest}); +} + function determineAndDispatchHTTPRequestEvents(/*CFHTTPRequest*/ aRequest) { - var eventDispatcher = aRequest._eventDispatcher; + var eventDispatcher = aRequest._eventDispatcher, + nativeRequest = aRequest._nativeRequest, + readyStates = ["uninitialized", "loading", "loaded", "interactive", "complete"]; eventDispatcher.dispatchEvent({ type:"readystatechange", request:aRequest}); - var nativeRequest = aRequest._nativeRequest, - readyStates = ["uninitialized", "loading", "loaded", "interactive", "complete"]; - if (readyStates[aRequest.readyState()] === "complete") { var status = "HTTP" + aRequest.status(); @@ -323,12 +352,21 @@ function FileRequest(/*CFURL*/ aURL, onsuccess, onfailure, onprogress) var aFilePath = aURL.toString().substring(5), OS = require("os"), gccFlags = require("objective-j").currentCompilerFlags(), - gcc = OS.popen("gcc -E -x c -P " + (gccFlags ? gccFlags : "") + " " + OS.enquote(aFilePath), { charset:"UTF-8" }), chunk, fileContents = ""; - while (chunk = gcc.stdout.read()) - fileContents += chunk; + try + { + var gcc = OS.popen("gcc -E -x c -P " + (gccFlags ? gccFlags : "") + " " + OS.enquote(aFilePath), { charset:"UTF-8" }); + while (chunk = gcc.stdout.read()) + fileContents += chunk; + } + finally + { + gcc.stdin.close(); + gcc.stdout.close(); + gcc.stderr.close(); + } if (fileContents.length > 0) { diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 9dbf5ebd9..f3e1db5c4 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -94,6 +94,7 @@ exports.run = function(args) print(" -I, --objj-include-paths include a specific framework paths") print(" -h, --help print this help"); print(" -m, --multifiles launch objj on several files") + print(" -x, --xml specify the output format in xml.") return; } @@ -101,45 +102,57 @@ exports.run = function(args) { switch (argv[0]) { + case "--objj-include-paths": case "-I": argv.shift(); OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); break; + case "--multifiles": case "-m": argv.shift(); multipleFiles = true; break + + case "-x": + case "--xml": + argv.shift(); + exports.outputFormatInXML = true; + break; } } } if (argv && argv.length > 0) { - var endCommand = false; + var endCommand = false, + errors = []; while (argv.length > 0) { - var arg0 = argv.shift(); - var mainFilePath = FILE.canonical(arg0); + var arg0 = argv.shift(), + mainFilePath = FILE.canonical(arg0); - if (multipleFiles) - { - // This is needed to process every files passed in args - // Otherwise it would stop when an error is raised or we would like to objj the other given files - try - { - exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); - } - catch(e) - { - print("\n" + e); - } - } - else + try { exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); } + catch(e) + { + if (exports.outputFormatInXML) + { + var dict = new CFMutableDictionary(); + dict.addValueForKey('line', e.line ? e.line : 0); + dict.addValueForKey('sourcePath', e.path ? e.path : mainFilePath); + dict.addValueForKey('message', e.message); + + errors.push(dict); + } + else + { + errors.push("\n" + e); + } + } if (typeof main === "function") { @@ -157,6 +170,14 @@ exports.run = function(args) ObjectiveJ.FileExecutable.resetFileExecutables(); objj_resetRegisterClasses(); } + + if (errors.length) + { + if (exports.outputFormatInXML) + throw CFPropertyListCreateXMLData(errors, kCFPropertyListXMLFormat_v1_0).rawString(); + else + throw errors; + } } else { @@ -229,6 +250,7 @@ function getPackage() { exports.version = function() { return getPackage()["version"]; } exports.revision = function() { return getPackage()["cappuccino-revision"]; } exports.timestamp = function() { return new Date(getPackage()["cappuccino-timestamp"]); } +exports.outputFormatInXML = false; exports.fullVersionString = function() { return sprintf("objective-j %s (%04d-%02d-%02d %s)", diff --git a/Objective-J/CommonJS/lib/objective-j/compiler.js b/Objective-J/CommonJS/lib/objective-j/compiler.js index 65079fd48..34416cde0 100644 --- a/Objective-J/CommonJS/lib/objective-j/compiler.js +++ b/Objective-J/CommonJS/lib/objective-j/compiler.js @@ -46,18 +46,39 @@ function compileWithResolvedFlags(aFilePath, objjcFlags, gccFlags, asPlainJavasc if (!shouldObjjPreprocess) { - if (OS.popen("which gcc").stdout.read().length === 0) - fileContents = FILE.read(aFilePath, { charset:"UTF-8" }); - else + try { - // GCC preprocess the file. - var gcc = OS.popen("gcc -E -x c -P " + (gccFlags ? gccFlags.join(" ") : "") + " " + OS.enquote(aFilePath), { charset:"UTF-8" }), - chunk = ""; + var p = OS.popen("which gcc"); - while (chunk = gcc.stdout.read()) - fileContents += chunk; + if (p.stdout.read().length === 0) + { + fileContents = FILE.read(aFilePath, { charset:"UTF-8" }); + } + else + { + try + { + var gcc = OS.popen("gcc -E -x c -P " + (gccFlags ? gccFlags.join(" ") : "") + " " + OS.enquote(aFilePath), { charset:"UTF-8" }), + chunk = ""; + while (chunk = gcc.stdout.read()) + fileContents += chunk; + } + finally + { + gcc.stdin.close(); + gcc.stdout.close(); + gcc.stderr.close(); + } + } } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); + } + return fileContents; } diff --git a/Objective-J/CommonJS/lib/objective-j/jake.js b/Objective-J/CommonJS/lib/objective-j/jake.js index 7d4bc9048..b1683c037 100644 --- a/Objective-J/CommonJS/lib/objective-j/jake.js +++ b/Objective-J/CommonJS/lib/objective-j/jake.js @@ -22,7 +22,6 @@ var FILE = require("file"); - var BUNDLE_TASK = require("objective-j/jake/bundletask"); exports.BundleTask = BUNDLE_TASK.BundleTask; diff --git a/Objective-J/Jakefile b/Objective-J/Jakefile index ca5bfeda9..2c83a5562 100644 --- a/Objective-J/Jakefile +++ b/Objective-J/Jakefile @@ -40,8 +40,8 @@ $BROWSER_FILES = new FileList($BROWSER_FILE).include($OBJECTIVEJ_FILES); filedir($BUILD_BROWSER_FILE, $BROWSER_FILES, function(aTask) { - gcc($BROWSER_FILE, - $BUILD_BROWSER_FILE, + gcc($BROWSER_FILE, + $BUILD_BROWSER_FILE, environmentFlags("Browser", "ObjJ").concat($INCLUDE_FLAGS, $DEBUG_FLAGS), $CONFIGURATION !== "Debug"); }); @@ -119,11 +119,20 @@ function gcc(inputFilePath, outputFilePath, flags, compress) stream.print("Building... \0green(" + outputFilePath +"\0)"); // GCC preprocess the file. - var cmd = ["gcc", "-E", "-x", "c", "-P"].concat(flags, inputFilePath).join(" "); - var gcc = OS.popen(cmd, { charset:"UTF-8" }); + var cmd = ["gcc", "-E", "-x", "c", "-P"].concat(flags, inputFilePath).join(" "), + contents = FILE.read("header.txt", { charset : "UTF-8" }); - var contents = FILE.read("header.txt", { charset : "UTF-8" }); - contents += gcc.stdout.read(); + try + { + var gcc = OS.popen(cmd, { charset:"UTF-8" }); + contents += gcc.stdout.read(); + } + finally + { + gcc.stdin.close(); + gcc.stdout.close(); + gcc.stderr.close(); + } if (FILE.extension(inputFilePath) === ".js" && compress) contents = compressor(contents); diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index d5561fb47..fd7e0e1ec 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -394,9 +394,22 @@ var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned* #ifdef BROWSER console.log(message); #else - print(message); + if (exports.outputFormatInXML) + { + var dict = new CFMutableDictionary(); + dict.addValueForKey('line', e.line); + dict.addValueForKey('sourcePath', this.URL.path()); + dict.addValueForKey('message', message); + + print(CFPropertyListCreateXMLData([dict], kCFPropertyListXMLFormat_v1_0).rawString()); + } + else + { + print(message); + } #endif } + throw e; } @@ -434,6 +447,8 @@ exports.ObjJAcornCompiler.compileFileDependencies = function(/*String*/ aString, ObjJAcornCompiler.prototype.compilePass2 = function() { + var warnings = []; + ObjJAcornCompiler.currentCompileFile = this.URL; this.pass = 2; this.jsBuffer = new StringBuffer(); @@ -442,14 +457,32 @@ ObjJAcornCompiler.prototype.compilePass2 = function() compile(this.tokens, new Scope(null ,{ compiler: this }), pass2); for (var i = 0; i < this.warnings.length; i++) { - var message = this.prettifyMessage(this.warnings[i], "WARNING"); + var warning = this.warnings[i], + type = "WARNING"; + + var message = this.prettifyMessage(warning, type); #ifdef BROWSER console.log(message); #else - print(message); + if (exports.outputFormatInXML) + { + var dict = new CFMutableDictionary(); + dict.addValueForKey('line', warning.line) + dict.addValueForKey('sourcePath', this.URL.path()) + dict.addValueForKey('message', message) + + warnings.push(dict); + } + else + { + print(message); + } #endif } + if (warnings.length && exports.outputFormatInXML) + print(CFPropertyListCreateXMLData(warnings, kCFPropertyListXMLFormat_v1_0).rawString()); + //print(this.URL + ": " + this.jsBuffer.toString()); return this.jsBuffer.toString(); } @@ -660,9 +693,13 @@ ObjJAcornCompiler.prototype.prettifyMessage = function(/* Message */ aMessage, / ObjJAcornCompiler.prototype.error_message = function(errorMessage, node) { var pos = exports.acorn.getLineInfo(this.source, node.start), - syntaxError = {message: errorMessage, line: pos.line, column: pos.column, lineStart: pos.lineStart, lineEnd: pos.lineEnd}; + syntaxErrorData = {message: errorMessage, line: pos.line, column: pos.column, lineStart: pos.lineStart, lineEnd: pos.lineEnd}, + syntaxError = new SyntaxError(this.prettifyMessage(syntaxErrorData, "ERROR")); - return new SyntaxError(this.prettifyMessage(syntaxError, "ERROR")); + syntaxError.line = pos.line; + syntaxError.path = this.URL.path(); + + return syntaxError; } ObjJAcornCompiler.prototype.pushImport = function(url) diff --git a/README.markdown b/README.markdown index ed87b834d..d8ffab704 100644 --- a/README.markdown +++ b/README.markdown @@ -1,3 +1,5 @@ +[![Build Status](https://travis-ci.org/cappuccino/cappuccino.svg?branch=master)](https://travis-ci.org/cappuccino/cappuccino) + Welcome to Cappuccino! ====================== @@ -33,7 +35,7 @@ Getting Started --------------- To get started, download and install the current release version of Cappuccino: - $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/v0.9.7-1/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh + $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/v0.9.8/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh If you'd just like to get started using Cappuccino for your web apps, you are done. @@ -71,7 +73,7 @@ If you need help with Cappuccino, you can get help from the following sources: - Mailing Lists: - [Objective-J](http://groups.google.com/group/objectivej) - [Objective-J Developers](http://groups.google.com/group/objectivej-dev) - - IRC: irc://irc.freenode.net#cappuccino + - [Gitter] (https://gitter.im/cappuccino/cappuccino) If you discover any bugs, please file a ticket at: diff --git a/Tests/AppKit/CPAnimationTest.j b/Tests/AppKit/CPAnimationTest.j index d151d82bc..85a462d46 100644 --- a/Tests/AppKit/CPAnimationTest.j +++ b/Tests/AppKit/CPAnimationTest.j @@ -1,8 +1,6 @@ @import @import -[CPApplication sharedApplication]; - @implementation CPAnimation (TestMethods) { } @@ -18,11 +16,17 @@ { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + - (void)testScheduleTimerWithIntervalBasedOnDefaultFrameRate { var animation = [[CPAnimation alloc] initWithDuration:0.1 animationCurve:CPAnimationLinear]; [animation startAnimation]; - + [self assert:1.0/60.0 equals:[[animation timer] timeInterval]]; } @@ -31,7 +35,7 @@ var animation = [[CPAnimation alloc] initWithDuration:0.1 animationCurve:CPAnimationLinear]; [animation setFrameRate:30]; [animation startAnimation]; - + [self assert:1.0/30.0 equals:[[animation timer] timeInterval]]; } @@ -40,7 +44,7 @@ var animation = [[CPAnimation alloc] initWithDuration:0.1 animationCurve:CPAnimationLinear]; [animation setFrameRate:0]; [animation startAnimation]; - + [self assert:0.0001 equals:[[animation timer] timeInterval]]; } diff --git a/Tests/AppKit/CPApplicationTest.j b/Tests/AppKit/CPApplicationTest.j index 0b7114f01..652b73105 100644 --- a/Tests/AppKit/CPApplicationTest.j +++ b/Tests/AppKit/CPApplicationTest.j @@ -65,7 +65,7 @@ var globalResults = []; { // This sets up the CPApp convenience variable, the unit tests fails // if this is not done, because the framework internally uses CPApp. - app = [CPApplication sharedApplication]; + app = [[CPApplication alloc] init]; // fake the window.location.hash window.location = {hash: "#var1=1/var2=2"}; diff --git a/Tests/AppKit/CPArrayControllerPerformance.j b/Tests/AppKit/CPArrayControllerPerformance.j index 98137b1ee..00dd4d21a 100644 --- a/Tests/AppKit/CPArrayControllerPerformance.j +++ b/Tests/AppKit/CPArrayControllerPerformance.j @@ -6,6 +6,15 @@ var ELEMENTS = 200, REPEATS = 25; @implementation CPArrayControllerPerformance : OJTestCase +{ + +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} - (CPArrayController)setupWithElements:(int)aCount { diff --git a/Tests/AppKit/CPArrayControllerTest.j b/Tests/AppKit/CPArrayControllerTest.j index 35b8e3388..ca33da5b8 100644 --- a/Tests/AppKit/CPArrayControllerTest.j +++ b/Tests/AppKit/CPArrayControllerTest.j @@ -56,6 +56,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _contentArray = [self makeTestArray]; [self initControllerWithSimpleArray] } diff --git a/Tests/AppKit/CPAutosizePerformance.j b/Tests/AppKit/CPAutosizePerformance.j index 443d8135d..a6f93bb91 100644 --- a/Tests/AppKit/CPAutosizePerformance.j +++ b/Tests/AppKit/CPAutosizePerformance.j @@ -1,9 +1,6 @@ @import @import -[CPApplication sharedApplication]; - - @implementation CPAutosizePerformance : OJTestCase { CPInteger NUMBER_OF_VIEWS; @@ -12,6 +9,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + NUMBER_OF_VIEWS = 50; RESIZES_COUNT = 250; } diff --git a/Tests/AppKit/CPBrowserTest.j b/Tests/AppKit/CPBrowserTest.j index bc29049bb..4831b64fa 100644 --- a/Tests/AppKit/CPBrowserTest.j +++ b/Tests/AppKit/CPBrowserTest.j @@ -2,7 +2,6 @@ @class CPBrowserDelegate - @implementation CPBrowserTest : OJTestCase { CPBrowser browser; @@ -11,6 +10,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + browser = [[CPBrowser alloc] initWithFrame:CGRectMake(0, 0, 500, 300)]; delegate = [CPBrowserDelegate new]; [delegate setEntries:[".1", ".1.1", ".1.2", ".1.2.1", ".1.2.2", ".2", ".3", ".3.1"]]; diff --git a/Tests/AppKit/CPButtonTest.j b/Tests/AppKit/CPButtonTest.j index 38f8a4286..e10550a9e 100644 --- a/Tests/AppKit/CPButtonTest.j +++ b/Tests/AppKit/CPButtonTest.j @@ -1,10 +1,7 @@ - @import @import @import -[CPApplication sharedApplication]; - @implementation CPButtonTest : OJTestCase { CPButton button; @@ -13,6 +10,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + button = [CPButton buttonWithTitle:"hello world"]; wasClicked = NO; } diff --git a/Tests/AppKit/CPCheckBoxTest.j b/Tests/AppKit/CPCheckBoxTest.j index 528c7bd30..49d83d81f 100644 --- a/Tests/AppKit/CPCheckBoxTest.j +++ b/Tests/AppKit/CPCheckBoxTest.j @@ -1,11 +1,15 @@ @import -[CPApplication sharedApplication] - @implementation CPCheckBoxTest : OJTestCase { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + /*! Verify that CPCheckBox placeholders work, both explicit and default ones. */ diff --git a/Tests/AppKit/CPCollectionViewTest.j b/Tests/AppKit/CPCollectionViewTest.j index 5000e1a84..2f73fd9e7 100644 --- a/Tests/AppKit/CPCollectionViewTest.j +++ b/Tests/AppKit/CPCollectionViewTest.j @@ -9,6 +9,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _collectionView = [[CPCollectionView alloc] initWithFrame:CGRectMakeZero()]; _globalResults = nil; } diff --git a/Tests/AppKit/CPColorTest.j b/Tests/AppKit/CPColorTest.j index b357a6805..27b7e1709 100644 --- a/Tests/AppKit/CPColorTest.j +++ b/Tests/AppKit/CPColorTest.j @@ -4,6 +4,12 @@ { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + - (void)testHexStringConversion { var colors = ['000000', '0099CC', '7E8EAB', 'FFFFFF']; diff --git a/Tests/AppKit/CPColorWellTest.j b/Tests/AppKit/CPColorWellTest.j index 2e57ee0b9..b870ce4ff 100644 --- a/Tests/AppKit/CPColorWellTest.j +++ b/Tests/AppKit/CPColorWellTest.j @@ -1,8 +1,6 @@ @import @import -[CPApplication sharedApplication]; - @implementation CPColorWellTest : OJTestCase { CPColorWell colorWell; @@ -10,6 +8,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + colorWell = [[CPColorWell alloc] initWithFrame:CGRectMakeZero()]; } diff --git a/Tests/AppKit/CPComboBoxTest.j b/Tests/AppKit/CPComboBoxTest.j index 3d12ed91c..09d3617be 100644 --- a/Tests/AppKit/CPComboBoxTest.j +++ b/Tests/AppKit/CPComboBoxTest.j @@ -4,8 +4,6 @@ @import "CPNotificationCenterHelper.j" -[CPApplication sharedApplication]; - @implementation CPComboBoxTest : OJTestCase { CPComboBox comboBox; @@ -14,6 +12,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + comboBox = [[CPComboBox alloc] initWithFrame:CGRectMake(0, 0, 200, 30)]; } diff --git a/Tests/AppKit/CPDOMDisplayServerTest.j b/Tests/AppKit/CPDOMDisplayServerTest.j index caf7f3aee..6d8be8e31 100644 --- a/Tests/AppKit/CPDOMDisplayServerTest.j +++ b/Tests/AppKit/CPDOMDisplayServerTest.j @@ -10,6 +10,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + // set up a dummy DOM element. DOMElement = { style: { diff --git a/Tests/AppKit/CPDatePickerTest.j b/Tests/AppKit/CPDatePickerTest.j new file mode 100644 index 000000000..6d21db25c --- /dev/null +++ b/Tests/AppKit/CPDatePickerTest.j @@ -0,0 +1,31 @@ +@import + +@import +@import +@import + + +@implementation CPDatePickerTest : OJTestCase +{ + CPDatePicker datePicker; +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + + datePicker = [[CPDatePicker alloc] initWithFrame:CGRectMake(200, 28, 0, 0)]; +} + +- (void)testCanCreate +{ + [self assertTrue:!!datePicker]; +} + +- (void)testLayoutSubviews +{ + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; +} + +@end diff --git a/Tests/AppKit/CPEventTest.j b/Tests/AppKit/CPEventTest.j index 09073d5a6..7570583dc 100644 --- a/Tests/AppKit/CPEventTest.j +++ b/Tests/AppKit/CPEventTest.j @@ -7,8 +7,8 @@ - (void)setUp { - // CPApplication must be initialised for some event handling to work. - [CPApplication sharedApplication]; + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; } /*! @@ -37,7 +37,7 @@ anEvent = [CPEvent otherEventWithType:CPApplicationDefined location:CGPointMakeZero() modifierFlags:0 timestamp:500.5 windowNumber:2 context:nil subtype:5 data1:15 data2:25]; - [self assert:@"CPEvent: type=15 loc={0, 0} time=500.5 flags=0x0 win=null winNum=0 ctxt=null subtype=5 data1=15 data2=25" equals:[anEvent description]]; + [self assert:@"CPEvent: type=15 loc={0, 0} time=500.5 flags=0x0 win=null winNum=2 ctxt=null subtype=5 data1=15 data2=25" equals:[anEvent description]]; } - (void)testModifierFlags diff --git a/Tests/AppKit/CPFontManagerTest.j b/Tests/AppKit/CPFontManagerTest.j index 04e817701..43173afca 100644 --- a/Tests/AppKit/CPFontManagerTest.j +++ b/Tests/AppKit/CPFontManagerTest.j @@ -1,7 +1,5 @@ @import -[CPApplication sharedApplication]; - @implementation CPFontManagerTest : OJTestCase { CPFont fontA; @@ -14,6 +12,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + fontA = [CPFont systemFontOfSize:8.0]; } diff --git a/Tests/AppKit/CPFontTest.j b/Tests/AppKit/CPFontTest.j index 77a51ff09..ace991a5a 100644 --- a/Tests/AppKit/CPFontTest.j +++ b/Tests/AppKit/CPFontTest.j @@ -11,6 +11,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _systemFont = [CPFont systemFontOfSize:15]; _boldSystemFont = [CPFont boldSystemFontOfSize:15]; diff --git a/Tests/AppKit/CPImageTest.j b/Tests/AppKit/CPImageTest.j index 2e808a78c..324eac73c 100644 --- a/Tests/AppKit/CPImageTest.j +++ b/Tests/AppKit/CPImageTest.j @@ -4,6 +4,12 @@ { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + - (void)testInitWithContentsOfFile_nil { var image = [[CPImage alloc] initWithContentsOfFile:nil]; diff --git a/Tests/AppKit/CPKeyEquivalentPerformance.j b/Tests/AppKit/CPKeyEquivalentPerformance.j index 84ea9e7b1..699c029fc 100644 --- a/Tests/AppKit/CPKeyEquivalentPerformance.j +++ b/Tests/AppKit/CPKeyEquivalentPerformance.j @@ -3,9 +3,16 @@ @import @import -[CPApplication sharedApplication]; - @implementation CPKeyEquivalentPerformance : OJTestCase +{ + +} + +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} - (void)testKeyEquivalentSpeed { diff --git a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j index d1bb9af84..4b282d83a 100644 --- a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j +++ b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j @@ -20,8 +20,8 @@ - (void)setUp { - // CPApp must be initialised or action sending will not work. - [CPApplication sharedApplication]; + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; track = [Track new]; [track setVolume:5.0]; diff --git a/Tests/AppKit/CPKeyValueBindingTest.j b/Tests/AppKit/CPKeyValueBindingTest.j index 8412e18a9..373f696a3 100644 --- a/Tests/AppKit/CPKeyValueBindingTest.j +++ b/Tests/AppKit/CPKeyValueBindingTest.j @@ -21,6 +21,12 @@ CPArrayController arrayController @accessors; } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + - (void)testExposingBindings { [BindingTester exposeBinding:@"foo"]; diff --git a/Tests/AppKit/CPLevelIndicatorTest.j b/Tests/AppKit/CPLevelIndicatorTest.j index 7047c8dea..08a84967d 100644 --- a/Tests/AppKit/CPLevelIndicatorTest.j +++ b/Tests/AppKit/CPLevelIndicatorTest.j @@ -7,6 +7,12 @@ { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + + (CPLevelIndicator)indicatorWithLowWarning { var levelIndicator = [[CPLevelIndicator alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; @@ -44,7 +50,7 @@ [levelIndicator setObjectValue:4]; [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - + [self assert:[CPColor yellowColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; } @@ -54,7 +60,7 @@ [levelIndicator setObjectValue:2]; [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - + [self assert:[CPColor redColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; } @@ -74,7 +80,7 @@ [levelIndicator setObjectValue:6]; [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - + [self assert:[CPColor yellowColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; } @@ -84,7 +90,7 @@ [levelIndicator setObjectValue:8]; [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - + [self assert:[CPColor redColor] equals:[GET_LEVEL_INDICATOR_SEGMENT(levelIndicator, 0) backgroundColor]]; } @end diff --git a/Tests/AppKit/CPMenuTest.j b/Tests/AppKit/CPMenuTest.j index 44a16e0dd..6449b65aa 100644 --- a/Tests/AppKit/CPMenuTest.j +++ b/Tests/AppKit/CPMenuTest.j @@ -1,10 +1,8 @@ - @import @import @import @import -[CPApplication sharedApplication] @implementation CPMenuTest : OJTestCase { @@ -21,6 +19,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + // Set up a fairly complete menu to have something to work with. menu = [[CPMenu alloc] initWithTitle:@"MainMenu"]; diff --git a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j index 5757c368d..30a79082d 100644 --- a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j +++ b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j @@ -11,6 +11,9 @@ var CPMenuValidatedUserInterfaceItemTestValidatedItems = []; - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _menuTarget = [[MenuTarget alloc] init]; [[CPApplication sharedApplication] setDelegate:_menuTarget]; diff --git a/Tests/AppKit/CPOutlineViewTest.j b/Tests/AppKit/CPOutlineViewTest.j index 129c6965b..881be24e1 100644 --- a/Tests/AppKit/CPOutlineViewTest.j +++ b/Tests/AppKit/CPOutlineViewTest.j @@ -2,7 +2,6 @@ @class TestOutlineDataSource - @implementation CPOutlineViewTest : OJTestCase { CPOutlineView outlineView; @@ -12,6 +11,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + outlineView = [[CPOutlineView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; tableColumn = [[CPTableColumn alloc] initWithIdentifier:@"Foo"]; diff --git a/Tests/AppKit/CPPasteboardTest.j b/Tests/AppKit/CPPasteboardTest.j index 860576ca2..b209eb998 100644 --- a/Tests/AppKit/CPPasteboardTest.j +++ b/Tests/AppKit/CPPasteboardTest.j @@ -6,6 +6,12 @@ { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + - (void)testSetString_forType_ { var pboard = [CPPasteboard generalPasteboard]; diff --git a/Tests/AppKit/CPPopUpButtonTest.j b/Tests/AppKit/CPPopUpButtonTest.j index 9e07b8366..a66ec0088 100644 --- a/Tests/AppKit/CPPopUpButtonTest.j +++ b/Tests/AppKit/CPPopUpButtonTest.j @@ -11,6 +11,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + button = [CPPopUpButton new]; } diff --git a/Tests/AppKit/CPPredicateEditorTest.j b/Tests/AppKit/CPPredicateEditorTest.j index a0063f254..32f040cc5 100644 --- a/Tests/AppKit/CPPredicateEditorTest.j +++ b/Tests/AppKit/CPPredicateEditorTest.j @@ -8,6 +8,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _editor = [[CPPredicateEditor alloc] initWithFrame:CGRectMakeZero()]; } diff --git a/Tests/AppKit/CPResponderTest.j b/Tests/AppKit/CPResponderTest.j index 8bc0a940b..4c3159ab3 100644 --- a/Tests/AppKit/CPResponderTest.j +++ b/Tests/AppKit/CPResponderTest.j @@ -4,8 +4,6 @@ @import -[CPApplication sharedApplication] - @implementation CPResponderTest : OJTestCase { CPWindow theWindow; @@ -14,6 +12,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + responder = [TestResponder new]; responder.doCommandCalls = []; } diff --git a/Tests/AppKit/CPScrollViewTest.j b/Tests/AppKit/CPScrollViewTest.j index 379cea865..5bcaad4b4 100644 --- a/Tests/AppKit/CPScrollViewTest.j +++ b/Tests/AppKit/CPScrollViewTest.j @@ -2,12 +2,17 @@ @import "CPNotificationCenterHelper.j" -[CPApplication sharedApplication]; @implementation CPScrollViewTest : OJTestCase { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + /*! Test that scroll views don't generate bad layouts when very small. */ @@ -229,7 +234,7 @@ [scrollView setDocumentView:documentView]; - [textField1 setFrameOrigin:CGPointMake(0, 0)]; + [textField1 setFrameOrigin:CGPointMake(10, 10)]; [textField2 setFrameOrigin:CGPointMake(500, 500)]; [documentView addSubview:textField1]; @@ -242,9 +247,11 @@ [self assertPoint:CGPointMake(0, 0) equals:visibleRect.origin message:@"VisibleRect origin not at top left corner"]; // Make the second text field visible - [textField2 scrollRectToVisible:[textField2 bounds]]; + var hasScrolled = [textField2 scrollRectToVisible:[textField2 bounds]]; - var visibleRectOriginShouldBeAt = CGPointMake(500 - originalVisibleSize.width + textField2Size.width, 500 -originalVisibleSize.height + textField2Size.height); + [self assertTrue:hasScrolled]; + + var visibleRectOriginShouldBeAt = CGPointMake(500 - originalVisibleSize.width + textField2Size.width, 500 - originalVisibleSize.height + textField2Size.height); visibleRect = [documentView visibleRect]; @@ -252,12 +259,66 @@ [self assertPoint:visibleRectOriginShouldBeAt equals:visibleRect.origin message:@"Second text field not at lower right corner in visible rect"]; // Make the first text field visible again - [textField1 scrollRectToVisible:[textField2 bounds]]; + hasScrolled = [textField1 scrollRectToVisible:[textField1 bounds]]; + [self assertTrue:hasScrolled]; visibleRect = [documentView visibleRect]; // We should now be back at top left corner - [self assertPoint:CGPointMake(0, 0) equals:visibleRect.origin message:@"VisibleRect origin not at top left corner again"]; + [self assertPoint:CGPointMake(10, 10) equals:visibleRect.origin message:@"VisibleRect origin not at top left corner again"]; + + // Try to scroll again and it should not scroll + hasScrolled = [textField1 scrollRectToVisible:[textField1 bounds]]; + [self assertFalse:hasScrolled]; +} + +- (void)testScrollRectToVisibleWithLargeRect +{ + var scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], + documentView = [[CPView alloc] initWithFrame:CGRectMake(0, 0, 1000, 1000)], + view1 = [[CPView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)], + view2 = [[CPView alloc] initWithFrame:CGRectMake(500, 500, 200, 200)], + view1Size = CGSizeMakeCopy([view1 bounds].size), + view2Size = CGSizeMakeCopy([view2 bounds].size); + + [scrollView setDocumentView:documentView]; + + [view1 setFrameOrigin:CGPointMake(0, 0)]; + [view2 setFrameOrigin:CGPointMake(500, 500)]; + + [documentView addSubview:view1]; + [documentView addSubview:view2]; + + var visibleRect = [documentView visibleRect], + originalVisibleSize = CGSizeMakeCopy(visibleRect.size); + + // Make sure we are at the top left corner + [self assertPoint:CGPointMake(0, 0) equals:visibleRect.origin message:@"VisibleRect origin not at top left corner"]; + + // Make the second view visible + var hasScrolled = [view2 scrollRectToVisible:[view2 bounds]]; + + [self assertTrue:hasScrolled]; + + visibleRect = [documentView visibleRect]; + + // We should now have the origin of view2 in the upper left corner + [self assertPoint:CGPointMake(500, 500) equals:visibleRect.origin message:@"Origin of second view not at upper left corner in visible rect"]; + + // Make the first view visible again + hasScrolled = [view1 scrollRectToVisible:[view1 bounds]]; + [self assertTrue:hasScrolled]; + + visibleRect = [documentView visibleRect]; + + var visibleRectOriginShouldBeAt = CGPointMake(200 - visibleRect.size.width, 200 - visibleRect.size.height); + + // We should now be back almost at top left corner except that the lower right corner of the rect should be at the lower right corner of the visible rect. + [self assertPoint:visibleRectOriginShouldBeAt equals:visibleRect.origin message:@"VisibleRect origin not at top left corner again"]; + + // Try to scroll again and it should not scroll even as some parts are outside the visible rect + hasScrolled = [view1 scrollRectToVisible:[view1 bounds]]; + [self assertFalse:hasScrolled]; } -(void)testNotificationsRegistered @@ -278,11 +339,49 @@ [self assert:[CPNotificationCenterHelper registeredNotificationsForObserver:scrollView] equals:[] message:@"Notications registered for the scrollView in the notification center are wrong"]; } +- (void)testDocumentVisibleRect +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) + styleMask:CPWindowNotSizable], + windowView = [theWindow contentView], + aScrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], + aDocumentView = [[CPView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; + + [CPScrollView setGlobalScrollerStyle:CPScrollerStyleOverlay]; + + [aScrollView setDocumentView:aDocumentView]; + [windowView addSubview:aScrollView]; + + [self assertRect:CGRectMake(0, 0, 100, 100) equals:[aScrollView documentVisibleRect] message:@"documentVisibleRect is wrong in CPScrollView"]; + + [aDocumentView setScaleSize:CGSizeMake(0.5, 0.5)]; + [self assertRect:CGRectMake(0, 0, 200, 200) equals:[aScrollView documentVisibleRect] message:@"documentVisibleRect is wrong in CPScrollView after scaling"]; + + [aDocumentView setScaleSize:CGSizeMake(1, 1)]; + [aDocumentView scrollRectToVisible:CGRectMake(120, 120, 20, 20)]; + [self assertRect:CGRectMake(40, 40, 100, 100) equals:[aScrollView documentVisibleRect] message:@"documentVisibleRect is wrong in CPScrollView"]; + + [aDocumentView setScaleSize:CGSizeMake(0.5, 0.5)]; + [self assertRect:CGRectMake(80, 80, 200, 200) equals:[aScrollView documentVisibleRect] message:@"documentVisibleRect is wrong in CPScrollView"]; +} + - (void)assertPoint:(CGPoint)expected equals:(CGPoint)actual message:(CPString)message { [self assert:expected.x equals:actual.x message:@"X: " + message]; [self assert:expected.y equals:actual.y message:@"Y: " + message]; } +- (void)assertSize:(CGSize)expected equals:(CGSize)actual message:(CPString)message +{ + [self assert:expected.width equals:actual.width message:@"Width: " + message]; + [self assert:expected.height equals:actual.height message:@"Height: " + message]; +} + +- (void)assertRect:(CGRect)expected equals:(CGRect)actual message:(CPString)message +{ + [self assertPoint:expected.origin equals:actual.origin message:message] + [self assertSize:expected.size equals:actual.size message:message] +} + @end diff --git a/Tests/AppKit/CPSearchFieldTest.j b/Tests/AppKit/CPSearchFieldTest.j index 3bd6029a8..64ea85047 100644 --- a/Tests/AppKit/CPSearchFieldTest.j +++ b/Tests/AppKit/CPSearchFieldTest.j @@ -7,6 +7,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _searchField = [[CPSearchField alloc] initWithFrame:CGRectMakeZero()]; } diff --git a/Tests/AppKit/CPSegmentedControlTest.j b/Tests/AppKit/CPSegmentedControlTest.j index f56c7f0a5..0ec784363 100644 --- a/Tests/AppKit/CPSegmentedControlTest.j +++ b/Tests/AppKit/CPSegmentedControlTest.j @@ -8,6 +8,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _segmentedControl = [[CPSegmentedControl alloc] initWithFrame:CGRectMakeZero()]; [_segmentedControl setSegmentCount:3]; } diff --git a/Tests/AppKit/CPSliderTest.j b/Tests/AppKit/CPSliderTest.j index d80184aff..0f045d117 100644 --- a/Tests/AppKit/CPSliderTest.j +++ b/Tests/AppKit/CPSliderTest.j @@ -4,6 +4,12 @@ { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + - (void)testIsContinuous { // While normally testing simple instance variables is a waste of time, diff --git a/Tests/AppKit/CPSplitViewTest.j b/Tests/AppKit/CPSplitViewTest.j index 6551c07b5..a3326f053 100644 --- a/Tests/AppKit/CPSplitViewTest.j +++ b/Tests/AppKit/CPSplitViewTest.j @@ -1,9 +1,6 @@ - @import @import -[CPApplication sharedApplication]; - @implementation CPSplitViewTest : OJTestCase { CPSplitView splitView; @@ -13,6 +10,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + splitView = [[CPSplitView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; viewA = [[CPView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)]; viewB = [[CPView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)]; diff --git a/Tests/AppKit/CPStepperTest.j b/Tests/AppKit/CPStepperTest.j index 59ced54d5..825af8f69 100644 --- a/Tests/AppKit/CPStepperTest.j +++ b/Tests/AppKit/CPStepperTest.j @@ -1,8 +1,6 @@ @import @import -[CPApplication sharedApplication] - @implementation CPStepperTest : OJTestCase { CPStepper stepper; @@ -10,6 +8,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + stepper = [CPStepper stepper]; [stepper setValueWraps:NO]; } diff --git a/Tests/AppKit/CPTabViewTest.j b/Tests/AppKit/CPTabViewTest.j index ad5b74550..a8e13ff71 100644 --- a/Tests/AppKit/CPTabViewTest.j +++ b/Tests/AppKit/CPTabViewTest.j @@ -1,8 +1,6 @@ @import @import - - @implementation CPTabView (TEST) - (CPSegmentedControl)tabs @@ -27,6 +25,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _tabView = [[CPTabView alloc] initWithFrame:CGRectMake(0, 0, 800, 600)]; _tabItem1 = [[CPTabViewItem alloc] initWithIdentifier:@"id1"]; diff --git a/Tests/AppKit/CPTableViewReloadDataTest.j b/Tests/AppKit/CPTableViewReloadDataTest.j index fdd99e70a..751baa687 100644 --- a/Tests/AppKit/CPTableViewReloadDataTest.j +++ b/Tests/AppKit/CPTableViewReloadDataTest.j @@ -1,7 +1,5 @@ @import -[CPApplication sharedApplication]; - @implementation CPTableViewReloadDataTest : OJTestCase { CPWindow theWindow; @@ -11,6 +9,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + tableContent = []; // setup a reasonable table theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) diff --git a/Tests/AppKit/CPTableViewTableColumnTest.j b/Tests/AppKit/CPTableViewTableColumnTest.j index 261e4a734..b3817c605 100644 --- a/Tests/AppKit/CPTableViewTableColumnTest.j +++ b/Tests/AppKit/CPTableViewTableColumnTest.j @@ -1,7 +1,5 @@ @import -[CPApplication sharedApplication]; - @implementation CPTableViewTableColumnTest : OJTestCase { CPWindow theWindow; @@ -10,6 +8,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + // setup a reasonable table theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) styleMask:CPWindowNotSizable]; diff --git a/Tests/AppKit/CPTableViewTest.j b/Tests/AppKit/CPTableViewTest.j index e3e29dccb..561906603 100644 --- a/Tests/AppKit/CPTableViewTest.j +++ b/Tests/AppKit/CPTableViewTest.j @@ -2,8 +2,6 @@ @import "CPNotificationCenterHelper.j" -[CPApplication sharedApplication]; - @implementation CPTableViewTest : OJTestCase { CPWindow theWindow; @@ -17,6 +15,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + // setup a reasonable table theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) styleMask:CPWindowNotSizable]; diff --git a/Tests/AppKit/CPTextFieldTest.j b/Tests/AppKit/CPTextFieldTest.j index bca749b45..6de3510c4 100644 --- a/Tests/AppKit/CPTextFieldTest.j +++ b/Tests/AppKit/CPTextFieldTest.j @@ -1,11 +1,16 @@ @import -[CPApplication sharedApplication] @implementation CPTextFieldTest : OJTestCase { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + /*! Detect regressions with JS object theme attribute encoding in subclasses. @@ -29,6 +34,7 @@ [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; [numberFormatter setMaximumFractionDigits:3]; + [numberFormatter setGeneratesDecimalNumbers:NO]; [control setFormatter:numberFormatter]; [control setStringValue:@"12.3456"]; diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j index 0c85d6ee9..e6fc1494c 100644 --- a/Tests/AppKit/CPThemeTest.j +++ b/Tests/AppKit/CPThemeTest.j @@ -4,6 +4,12 @@ { } +- (void)setUp +{ + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; +} + - (void)testCreatingThemeState { var themeState = new ThemeState({'test': true, 'test1': true}); diff --git a/Tests/AppKit/CPTokenFieldTest.j b/Tests/AppKit/CPTokenFieldTest.j index cd65113ad..7b9be7051 100644 --- a/Tests/AppKit/CPTokenFieldTest.j +++ b/Tests/AppKit/CPTokenFieldTest.j @@ -2,8 +2,6 @@ @class TestDelegateTokenField -[CPApplication sharedApplication]; - @implementation CPTokenFieldTest : OJTestCase { CPWindow _theWindow; @@ -14,6 +12,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) styleMask:CPWindowNotSizable]; diff --git a/Tests/AppKit/CPTreeNodeTest.j b/Tests/AppKit/CPTreeNodeTest.j index 3bb5510a8..4e40b5f98 100644 --- a/Tests/AppKit/CPTreeNodeTest.j +++ b/Tests/AppKit/CPTreeNodeTest.j @@ -1,7 +1,5 @@ - @import - @implementation CPTreeNodeTest : OJTestCase { CPTreeNode treeNode; @@ -10,6 +8,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + treeNode = [CPTreeNode treeNodeWithRepresentedObject:nil]; childNode = [CPTreeNode treeNodeWithRepresentedObject:nil]; diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 549773b26..b3f1b80e2 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -1,9 +1,6 @@ - @import @import -[CPApplication sharedApplication] - var methodCalled; @implementation CPViewTest : OJTestCase @@ -18,6 +15,9 @@ var methodCalled; - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + window = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1000.0, 1000.0) styleMask:CPWindowNotSizable]; view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; @@ -771,6 +771,112 @@ var methodCalled; [self assert:nil equals:view._toolTipFunctionOut]; } +- (void)testAppearanceDefaultvalue +{ + [self assert:nil equals:[view appearance]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantDark]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantLight]]; + [self assert:nil equals:[view effectiveAppearance]]; +} + +- (void)testAppearanceWithVibrantDark +{ + [view setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark] equals:[view appearance]]; + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark] equals:[view effectiveAppearance]]; + [self assertTrue:[view hasThemeState:CPThemeStateAppearanceVibrantDark]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantLight]]; +} + +- (void)testAppearanceWithVibrantLight +{ + [view setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; + + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight] equals:[view appearance]]; + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight] equals:[view effectiveAppearance]]; + [self assertTrue:[view hasThemeState:CPThemeStateAppearanceVibrantLight]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantDark]]; +} + +- (void)testAppearanceReset +{ + [view setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; + [view setAppearance:nil]; + + [self assert:nil equals:[view appearance]]; + [self assert:nil equals:[view effectiveAppearance]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantLight]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantDark]]; +} + +- (void)testEffectiveAppearance +{ + var secondView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [view addSubview:secondView]; + + [self assert:nil equals:[secondView appearance]]; + + [view setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; + + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight] equals:[secondView effectiveAppearance]]; +} + +- (void)testEffectiveAppearanceWithMovingViews +{ + var viewA = [[CPView alloc] initWithFrame:CGRectMakeZero()], + viewB = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [viewA setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; + [viewB setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + + [viewA addSubview:view]; + + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight] equals:[view effectiveAppearance]]; + [self assertTrue:[view hasThemeState:CPThemeStateAppearanceVibrantLight]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantDark]]; + + [viewB addSubview:view]; + + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark] equals:[view effectiveAppearance]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantLight]]; + [self assertTrue:[view hasThemeState:CPThemeStateAppearanceVibrantDark]]; +} + +- (void)testEffectiveAppearanceWithMovingViewHierarchy +{ + var viewC = [[CPView alloc] initWithFrame:CGRectMakeZero()], + viewA = [[CPView alloc] initWithFrame:CGRectMakeZero()], + viewB = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [view setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; + [viewC setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + + [viewA addSubview:viewB]; + [view addSubview:viewA]; + + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight] equals:[viewB effectiveAppearance]]; + + [viewC addSubview:viewA]; + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark] equals:[viewB effectiveAppearance]]; +} + +- (void)testEffectiveAppearanceReset +{ + var viewA = [[CPView alloc] initWithFrame:CGRectMakeZero()], + viewB = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [viewA setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; + [viewB setAppearance:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]]; + + [viewA addSubview:view]; + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight] equals:[view effectiveAppearance]]; + + [view removeFromSuperview]; + [self assert:nil equals:[view effectiveAppearance]]; +} + @end @implementation CPLayoutView : CPView diff --git a/Tests/AppKit/CPWindowTest.j b/Tests/AppKit/CPWindowTest.j index cf51e8cba..b3a7d2ba0 100644 --- a/Tests/AppKit/CPWindowTest.j +++ b/Tests/AppKit/CPWindowTest.j @@ -1,10 +1,7 @@ - @import @import @import -[CPApplication sharedApplication]; - @implementation CPWindowTest : OJTestCase { CPWindow _window @accessors(property=window); @@ -12,6 +9,9 @@ - (void)setUp { + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; + _window = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) styleMask:CPWindowNotSizable]; } diff --git a/Tests/AppKit/WithAndWithoutBindingsIntegration/01_WithoutBindings/WithoutBindingsTest.j b/Tests/AppKit/WithAndWithoutBindingsIntegration/01_WithoutBindings/WithoutBindingsTest.j index 134fed5d4..9aadbb1aa 100644 --- a/Tests/AppKit/WithAndWithoutBindingsIntegration/01_WithoutBindings/WithoutBindingsTest.j +++ b/Tests/AppKit/WithAndWithoutBindingsIntegration/01_WithoutBindings/WithoutBindingsTest.j @@ -30,10 +30,10 @@ { } -- (void)setUp ++ (void)setUp { - // CPApp must be initialised or action sending will not work. - [CPApplication sharedApplication]; + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; } - (void)test diff --git a/Tests/AppKit/WithAndWithoutBindingsIntegration/02_WithBindings/WithBindingsTest.j b/Tests/AppKit/WithAndWithoutBindingsIntegration/02_WithBindings/WithBindingsTest.j index fe266be8a..31064148b 100644 --- a/Tests/AppKit/WithAndWithoutBindingsIntegration/02_WithBindings/WithBindingsTest.j +++ b/Tests/AppKit/WithAndWithoutBindingsIntegration/02_WithBindings/WithBindingsTest.j @@ -32,10 +32,10 @@ { } -- (void)setUp ++ (void)setUp { - // CPApp must be initialised or action sending will not work. - [CPApplication sharedApplication]; + // This will init the global var CPApp which are used internally in the AppKit + [[CPApplication alloc] init]; } - (void)test diff --git a/Tests/Foundation/CPDictionaryTest.j b/Tests/Foundation/CPDictionaryTest.j index f14dce9b0..5cdd75983 100644 --- a/Tests/Foundation/CPDictionaryTest.j +++ b/Tests/Foundation/CPDictionaryTest.j @@ -419,7 +419,7 @@ - (void)testInitWithObjectsAndKeys { - var dict = [[CPDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", nil, @"Key2", @"Value3", @"Key3"]; + var dict = [[CPDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value3", @"Key3"]; [self assert:2 equals:[dict count]]; [self assert:@"Value1" equals:[dict objectForKey:@"Key1"]]; @@ -427,6 +427,13 @@ [self assert:@"Value3" equals:[dict objectForKey:@"Key3"]]; } +- (void)testInitWithObjectsAndKeysAndNilValueShouldThrowException +{ + [self assertThrows:function () { + [[CPDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", nil, @"Key2", @"Value3", @"Key3"] + }]; +} + - (void)testDictionaryLiteral { var dict = @{ diff --git a/Tests/Foundation/CPNumberFormatterTest.j b/Tests/Foundation/CPNumberFormatterTest.j index 81d994824..29deac36a 100644 --- a/Tests/Foundation/CPNumberFormatterTest.j +++ b/Tests/Foundation/CPNumberFormatterTest.j @@ -62,6 +62,7 @@ [numberFormatter setMinimum:10]; [numberFormatter setMaximum:20]; + [numberFormatter setGeneratesDecimalNumbers:NO]; [self assertTrue:[numberFormatter getObjectValue:objectValueRef forString:@"10" errorDescription:nil] message:@"MinMax T1: Expected True."]; diff --git a/Tests/Foundation/CPPredicateTest.j b/Tests/Foundation/CPPredicateTest.j index 114f440e9..670a13b5b 100644 --- a/Tests/Foundation/CPPredicateTest.j +++ b/Tests/Foundation/CPPredicateTest.j @@ -526,6 +526,57 @@ [self assertTrue:[result isEqual:data] message:"[1, 2, 3] filtered with '" + [ctpred description] + "' should return [1, 2, 3]"]; } +- (void)testConstantValueExpressionWithBooleanValueIsBoolean +{ + var right = [[CPPredicate predicateWithFormat:@"k = YES"] rightExpression]; + + [self assert:CPConstantValueExpressionType equals:[right expressionType]]; + [self assert:YES equals:[right constantValue]]; + [self assert:'boolean' equals:typeof [right constantValue]]; + + right = [[CPPredicate predicateWithFormat:@"k = NO"] rightExpression]; + + [self assert:CPConstantValueExpressionType equals:[right expressionType]]; + [self assert:NO equals:[right constantValue]]; + [self assert:'boolean' equals:typeof [right constantValue]]; +} + +- (void)testEvaluateBooleanConstantValueExpressionWithDifferentObjects +{ + var yesPredicate = [CPPredicate predicateWithFormat:@"self = YES"], + noPredicate = [CPPredicate predicateWithFormat:@"self = NO"]; + + var evalYesPredicate = function(object) { return [yesPredicate evaluateWithObject:object]; }, + evalNoPredicate = function(object) { return [noPredicate evaluateWithObject:object]; }; + + var fixtures = [ + { + message:@"booleans", + values: [YES, NO], + expected_yes: [YES, NO], + expected_no: [ NO, YES] + }, + { + message:@"numbers", + values: [ 0, 1, 2], + expected_yes: [ NO, YES, NO], + expected_no: [YES, NO, NO] + }, + { + message:@"strings", + values: [@"1", @"2", @"true", @"false", @"", @"YES", @"NO"], + expected_yes: [ NO , NO , NO , NO , NO, NO , NO ], + expected_no: [ NO , NO , NO , NO , NO, NO , NO ] + }]; + + for (var i = 0; i < [fixtures count]; i++) + { + var fixture = fixtures[i]; + [self assert:fixture.expected_yes equals:fixture.values.map(evalYesPredicate) message:fixture.message + " with YES-predicate"]; + [self assert:fixture.expected_no equals:fixture.values.map(evalNoPredicate) message:fixture.message + " with NO-predicate"]; + } +} + @end @implementation CPObject (PredicateTesting) diff --git a/Tests/Manual/CPPlatformWindow/AppController.j b/Tests/Manual/CPPlatformWindow/AppController.j index 8b5dad152..367d498bc 100644 --- a/Tests/Manual/CPPlatformWindow/AppController.j +++ b/Tests/Manual/CPPlatformWindow/AppController.j @@ -24,6 +24,24 @@ // This is called when the application is done loading. [[CPPlatformWindow alloc] initWithWindow:externalWindow]; [externalWindow setDelegate:self]; + [theWindow setDelegate:self]; +} + +- (void)applicationWillTerminate:(CPApplication)sender +{ + CPLog.debug(@"applicationWillTerminate"); +} + +- (CPApplicationTerminateReply)applicationShouldTerminate:(CPApplication)sender +{ + CPLog.debug(@"applicationShouldTerminate"); + return CPTerminateCancel; +} + +- (CPString)applicationShouldTerminateMessage:(CPApplication)sender +{ + CPLog.debug(@"applicationShouldTerminate"); + return @"Oula attention - achtung - carefull - you are about to reload"; } - (void)awakeFromCib @@ -43,7 +61,7 @@ - (IBAction)closeWindow:(id)sender { - [externalWindow orderOut:sender]; + [externalWindow close]; } - (IBAction)changeFrame:(id)sender @@ -96,9 +114,36 @@ CPLog.debug("windowDidResize:"); } +- (CPSize)windowWillResize:(CPWindow)sender toSize:(CPSize)aSize +{ + CPLog.debug("windowWillResize:toSize"); + return aSize; +} + - (void)windowWillClose:(CPWindow)aWindow { CPLog.debug("windowWillClose:"); } +- (void)applicationDidResignActive:(CPNotification)aNotification +{ + CPLog.debug(@"applicationDidResignActive"); +} + +- (void)applicationDidBecomeActive:(CPNotification)aNotification +{ + CPLog.debug(@"applicationDidBecomeActive"); +} + +- (void)applicationWillResignActive:(CPNotification)aNotification +{ + CPLog.debug(@"applicationWillResignActive"); +} + +- (void)applicationWillBecomeActive:(CPNotification)aNotification +{ + CPLog.debug(@"applicationWillBecomeActive"); +} + + @end diff --git a/Tests/Manual/CPPlatformWindow/Resources/MainMenu.cib b/Tests/Manual/CPPlatformWindow/Resources/MainMenu.cib index ece00cd2c..0099ab2a2 100644 --- a/Tests/Manual/CPPlatformWindow/Resources/MainMenu.cib +++ b/Tests/Manual/CPPlatformWindow/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;140E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;141E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;142E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;136E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;128E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;115E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;179E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;141E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;183E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;184E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;185E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;63E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;186E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;189E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;191E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;194E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;196E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;197E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;69E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;69E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;198E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;199E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;200E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;201E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;202E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;204E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;191E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;191E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;76E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;76E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;206E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;208E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;76E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;209E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;210E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;79E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;79E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;210E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;212E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;213E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;214E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;215E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;216E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;191E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;218E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;220E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;222E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;191E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;223E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;224E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;226E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;90E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;90E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;226E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;228E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;229E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;230E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;231E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;233E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;236E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;237E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;240E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;97E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;242E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;245E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;246E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;249E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;250E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;252E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;107E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;107E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;254E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;256E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;240E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;237E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;229E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;230E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;259E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;259E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;262E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;264E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;265E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;266E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;267E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;269E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;118E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;118E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;269E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;270E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;118E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;273E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;274E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;191E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;275E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;124E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;187E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;124E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;276E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;279E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;281E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;124E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;188E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;282E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;283E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;284E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;285E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;286E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;234E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;186E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;130E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;288E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;292E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;293E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;296E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;287E;K;6;$afontD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;287E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;287E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;300E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;192E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;193E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;287E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;191E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;287E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;302E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;303E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;296E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;287E;K;6;$afontD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;287E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;287E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;304E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;192E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;193E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;287E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;191E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;287E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;130E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;305E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;293E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;296E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;287E;K;6;$afontD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;287E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;287E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;306E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;192E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;193E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;287E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;191E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;287E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;282E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;283E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;308E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;309E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;286E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;310E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;311E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;312E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;312E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;313E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;137E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;314E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;303E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;137E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;296E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;287E;K;6;$afontD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;287E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;287E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;304E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;192E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;193E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;287E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;191E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;287E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;137E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;315E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;293E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;137E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;296E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;287E;K;6;$afontD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;287E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;287E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;306E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;192E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;193E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;287E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;191E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;287E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;137E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;287E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;316E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;317E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;137E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;296E;K;11;$aalignmentD;K;6;CP$UIDd;3;237E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;287E;K;6;$afontD;K;6;CP$UIDd;3;298E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;291E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;291E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;193E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;287E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;299E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;287E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;318E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;192E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;193E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;301E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;287E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;191E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;237E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;287E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;E;E;S;8;delegateS;14;externalWindowS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;11;showWindow:S;12;closeWindow:S;12;changeFrame:S;10;showAlert:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;75E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;71E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;77E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;102E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;92E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;101E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;104E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;122E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;119E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 150}, {480, 360}}S;21;{{0, 0}, {1440, 900}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;S;6;normalS;6;{1, 1}S;21;{{31, 51}, {119, 25}}S;19;{{0, 0}, {119, 25}}d;2;36S;6;buttonS;27;bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;297E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;319E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;320E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;193E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;193E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;193E;E;d;1;4S;13;Show Platformd;2;14S;21;{{31, 84}, {120, 25}}S;19;{{0, 0}, {120, 25}}S;14;Close PlatformS;22;{{31, 117}, {119, 25}}S;12;Change FrameS;13;AppControllerd;10;1685586944S;24;{{131, 472}, {562, 270}}d;2;15S;18;My platform WindowS;20;{{0, 0}, {562, 270}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;E;E;S;21;{{96, 43}, {120, 25}}S;22;{{228, 43}, {119, 25}}S;21;{{359, 43}, {95, 25}}S;18;{{0, 0}, {95, 25}}S;10;Show AlertS;29;.Helvetica Neue DeskInterfaced;2;13E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;149E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;150E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;151E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;148E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;152E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;153E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;141E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;156E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;115E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;118E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;60E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;179E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;111E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;191E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;191E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;150E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;194E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;195E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;196E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;197E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;65E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;65E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;197E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;200E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;202E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;205E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;207E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;208E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;209E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;71E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;71E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;209E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;210E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;212E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;213E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;71E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;214E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;215E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;71E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;216E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;202E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;71E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;202E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;71E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;78E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;78E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;217E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;220E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;81E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;81E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;221E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;223E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;225E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;226E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;227E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;202E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;228E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;231E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;232E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;233E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;202E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;234E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;237E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;92E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;92E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;237E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;240E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;92E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;92E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;245E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;92E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;246E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;248E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;92E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;249E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;251E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;92E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;252E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;99E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;99E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;253E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;255E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;256E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;260E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;99E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;105E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;105E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;261E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;265E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;109E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;109E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;81E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;265E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;267E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;251E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;252E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;248E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;249E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;269E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;240E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;270E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;273E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;274E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;275E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;277E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;279E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;120E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;120E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;280E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;281E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;283E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;284E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;285E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;202E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;287E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;126E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;198E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;126E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;62E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;287E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;289E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;290E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;292E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;199E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;293E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;294E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;295E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;296E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;297E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;245E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;197E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;132E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;299E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;299E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;300E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;301E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;132E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;303E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;306E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;307E;K;11;$aalignmentD;K;6;CP$UIDd;3;248E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;298E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;298E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;311E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;203E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;204E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;298E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;202E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;248E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;298E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;132E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;313E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;314E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;306E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;307E;K;11;$aalignmentD;K;6;CP$UIDd;3;248E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;298E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;298E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;315E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;203E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;204E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;298E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;202E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;248E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;298E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;132E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;316E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;306E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;307E;K;11;$aalignmentD;K;6;CP$UIDd;3;248E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;298E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;298E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;203E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;204E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;298E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;202E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;248E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;298E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;132E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;318E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;320E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;321E;K;11;$aalignmentD;K;6;CP$UIDd;3;310E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;248E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;202E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;203E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;202E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;323E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;248E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;310E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;204E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;204E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;132E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;324E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;320E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;321E;K;11;$aalignmentD;K;6;CP$UIDd;3;310E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;248E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;202E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;203E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;202E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;323E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;248E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;310E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;204E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;204E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;325E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;293E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;294E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;326E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;327E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;297E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;328E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;329E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;330E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;330E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;301E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;332E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;314E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;142E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;306E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;307E;K;11;$aalignmentD;K;6;CP$UIDd;3;248E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;298E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;298E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;315E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;203E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;204E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;298E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;202E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;248E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;298E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;333E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;142E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;306E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;307E;K;11;$aalignmentD;K;6;CP$UIDd;3;248E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;298E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;298E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;203E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;204E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;298E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;202E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;248E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;298E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;334E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;335E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;142E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;306E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;307E;K;11;$aalignmentD;K;6;CP$UIDd;3;248E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;298E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;298E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;336E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;203E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;204E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;298E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;202E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;248E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;298E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;337E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;142E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;320E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;321E;K;11;$aalignmentD;K;6;CP$UIDd;3;310E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;248E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;202E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;203E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;202E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;323E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;248E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;310E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;204E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;204E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;202E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;147E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;338E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;339E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;142E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;301E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;298E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;341E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;142E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;320E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;321E;K;11;$aalignmentD;K;6;CP$UIDd;3;310E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;248E;K;6;$afontD;K;6;CP$UIDd;3;309E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;302E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;302E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;204E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;202E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;203E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;310E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;298E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;202E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;202E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;323E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;248E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;310E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;204E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;204E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;202E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;130E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;342E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;343E;E;E;S;8;delegateS;14;externalWindowS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;11;showWindow:S;12;closeWindow:S;12;changeFrame:S;10;showAlert:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;77E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;73E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;104E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;94E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;103E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;106E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;124E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;121E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 127}, {480, 360}}S;21;{{0, 0}, {1440, 877}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;E;E;S;6;normalS;6;{1, 1}S;21;{{31, 51}, {119, 25}}S;19;{{0, 0}, {119, 25}}d;2;36S;6;buttonS;27;bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;308E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;344E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;345E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;204E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;204E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;204E;E;d;1;4S;13;Show Platformd;2;14S;21;{{31, 84}, {120, 25}}S;19;{{0, 0}, {120, 25}}S;14;Close PlatformS;22;{{31, 117}, {119, 25}}S;12;Change FrameS;22;{{27, 143}, {127, 22}}S;19;{{0, 0}, {127, 22}}S;9;textfieldS;47;bezeled+controlSizeRegular+editable+placeholderD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;322E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;346E;E;S;22;{{27, 175}, {127, 22}}S;13;AppControllerd;10;1685586944S;24;{{131, 449}, {562, 270}}d;2;15S;18;My platform WindowS;20;{{0, 0}, {562, 270}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;148E;E;E;S;21;{{96, 43}, {120, 25}}S;22;{{228, 43}, {119, 25}}S;21;{{359, 43}, {95, 25}}S;18;{{0, 0}, {95, 25}}S;10;Show AlertS;22;{{224, 69}, {127, 22}}S;21;{{0, 241}, {562, 29}}S;19;{{0, 0}, {562, 29}}S;6;CPViewS;23;{{224, 101}, {127, 22}}S;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;322E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;347E;E;S;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;251E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;298E;D;K;6;CP$UIDd;3;251E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPPlatformWindow/Resources/MainMenu.xib b/Tests/Manual/CPPlatformWindow/Resources/MainMenu.xib index 802b837e8..6a5d38746 100644 --- a/Tests/Manual/CPPlatformWindow/Resources/MainMenu.xib +++ b/Tests/Manual/CPPlatformWindow/Resources/MainMenu.xib @@ -2,20 +2,23 @@ 1050 - 14D87h - 6751 - 1347.23 - 758.40 + 14D72i + 6254 + 1347.13 + 758.30 com.apple.InterfaceBuilder.CocoaPlugin - 6751 + 6254 NSButton NSButtonCell NSCustomObject + NSCustomView NSMenu NSMenuItem + NSTextField + NSTextFieldCell NSView NSWindowTemplate @@ -704,6 +707,7 @@ {{25, 215}, {131, 32}} + _NS:9 YES @@ -722,13 +726,74 @@ NO + + + 268 + {{31, 192}, {119, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + 1 + + + + 268 + {{31, 160}, {119, 22}} + + + _NS:9 + YES + + -1804599231 + 272630784 + + + _NS:9 + + YES + + + + NO + 1 + {480, 360} - {{0, 0}, {1440, 900}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} YES @@ -804,6 +869,7 @@ {{353, 199}, {107, 32}} + _NS:9 YES @@ -822,13 +888,69 @@ NO + + + 268 + {{228, 176}, {119, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{228, 144}, {119, 22}} + + + _NS:9 + YES + + -1804599231 + 272630784 + + + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {562, 29} + + + + _NS:9 + + {562, 270} + _NS:20 - {{0, 0}, {1440, 900}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} YES @@ -1655,6 +1777,8 @@ + + @@ -1717,6 +1841,9 @@ + + + @@ -1759,6 +1886,63 @@ + + 487 + + + + + + + + 488 + + + + + 489 + + + + + + + + 490 + + + + + 491 + + + + + 492 + + + + + + + + 493 + + + + + 494 + + + + + + + + 495 + + + @@ -1841,6 +2025,32 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 1 + MCAwIDAAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1859,7 +2069,7 @@ - 486 + 495 diff --git a/Tests/Manual/CPProgressIndicator/AppController.j b/Tests/Manual/CPProgressIndicator/AppController.j index 82019f0e2..410a94614 100644 --- a/Tests/Manual/CPProgressIndicator/AppController.j +++ b/Tests/Manual/CPProgressIndicator/AppController.j @@ -7,13 +7,18 @@ */ @import - +@import +@import @implementation AppController : CPObject { CPWindow theWindow; //this "outlet" is connected automatically by the Cib @outlet CPProgressIndicator fiftyPercentBar @accessors; @outlet CPProgressIndicator hundredPercentBar @accessors; + + @outlet CPProgressIndicator twentyPercentCircular @accessors; + @outlet CPProgressIndicator fiftyPercentCircular @accessors; + @outlet CPProgressIndicator hundredPercentCircular @accessors; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification @@ -31,6 +36,13 @@ [fiftyPercentBar setDoubleValue:50]; [hundredPercentBar setDoubleValue:100]; + [twentyPercentCircular setMaxValue:200]; + [twentyPercentCircular setMinValue:50]; + [twentyPercentCircular setDoubleValue:80]; + + [fiftyPercentCircular setDoubleValue:50]; + [hundredPercentCircular setDoubleValue:100]; + [theWindow center]; } diff --git a/Tests/Manual/CPProgressIndicator/Resources/MainMenu.cib b/Tests/Manual/CPProgressIndicator/Resources/MainMenu.cib index 54a1fcf7b..89bf73572 100644 --- a/Tests/Manual/CPProgressIndicator/Resources/MainMenu.cib +++ b/Tests/Manual/CPProgressIndicator/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;39E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;40E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;38E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;21E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;39E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;45E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;46E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;47E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;48E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;49E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;50E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;23E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;54E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;56E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;6;$afontD;K;6;CP$UIDd;2;61E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;64E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;65E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;67E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;69E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;62E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;63E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;19;CPProgressIndicatorK;8;$classesA;S;19;CPProgressIndicatorS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;70E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;9;_minValueD;K;6;CP$UIDd;2;52E;K;9;_maxValueD;K;6;CP$UIDd;2;73E;K;12;_doubleValueD;K;6;CP$UIDd;2;52E;K;12;_controlSizeD;K;6;CP$UIDd;2;52E;K;14;_indeterminateD;K;6;CP$UIDd;2;67E;K;6;_styleD;K;6;CP$UIDd;2;52E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;74E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;9;_minValueD;K;6;CP$UIDd;2;52E;K;9;_maxValueD;K;6;CP$UIDd;2;73E;K;12;_doubleValueD;K;6;CP$UIDd;2;52E;K;12;_controlSizeD;K;6;CP$UIDd;2;52E;K;14;_indeterminateD;K;6;CP$UIDd;2;67E;K;6;_styleD;K;6;CP$UIDd;2;52E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;75E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;9;_minValueD;K;6;CP$UIDd;2;52E;K;9;_maxValueD;K;6;CP$UIDd;2;73E;K;12;_doubleValueD;K;6;CP$UIDd;2;52E;K;12;_controlSizeD;K;6;CP$UIDd;2;52E;K;14;_indeterminateD;K;6;CP$UIDd;2;64E;K;6;_styleD;K;6;CP$UIDd;2;52E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;76E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;71E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;9;_minValueD;K;6;CP$UIDd;2;52E;K;9;_maxValueD;K;6;CP$UIDd;2;73E;K;12;_doubleValueD;K;6;CP$UIDd;2;52E;K;12;_controlSizeD;K;6;CP$UIDd;2;52E;K;14;_indeterminateD;K;6;CP$UIDd;2;67E;K;6;_styleD;K;6;CP$UIDd;2;52E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;77E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;6;$afontD;K;6;CP$UIDd;2;61E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;64E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;78E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;67E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;69E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;62E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;63E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;79E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;6;$afontD;K;6;CP$UIDd;2;61E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;64E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;67E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;69E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;62E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;63E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;6;$afontD;K;6;CP$UIDd;2;61E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;64E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;67E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;69E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;62E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;63E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;6;$afontD;K;6;CP$UIDd;2;61E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;64E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;84E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;67E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;69E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;62E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;63E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;85E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;86E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;9;_minValueD;K;6;CP$UIDd;2;52E;K;9;_maxValueD;K;6;CP$UIDd;2;73E;K;12;_doubleValueD;K;6;CP$UIDd;2;52E;K;12;_controlSizeD;K;6;CP$UIDd;2;63E;K;14;_indeterminateD;K;6;CP$UIDd;2;64E;K;6;_styleD;K;6;CP$UIDd;2;63E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;72E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;9;_minValueD;K;6;CP$UIDd;2;52E;K;9;_maxValueD;K;6;CP$UIDd;2;73E;K;12;_doubleValueD;K;6;CP$UIDd;2;52E;K;12;_controlSizeD;K;6;CP$UIDd;2;62E;K;14;_indeterminateD;K;6;CP$UIDd;2;64E;K;6;_styleD;K;6;CP$UIDd;2;63E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;89E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;57E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;58E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;59E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;6;$afontD;K;6;CP$UIDd;2;61E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;64E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;90E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;67E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;67E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;69E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;62E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;63E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;91E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;E;E;S;8;delegateS;15;fiftyPercentBarS;17;hundredPercentBarS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 838}, {266, 190}}S;22;{{0, 0}, {2560, 1418}}d;1;7S;19;CPProgressIndicatord;1;0S;20;{{0, 0}, {266, 190}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;36E;E;E;S;6;normalS;21;{{20, 19}, {126, 17}}S;19;{{0, 0}, {126, 17}}d;2;36S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;60E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;92E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;93E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;64E;E;d;1;2d;1;1T;S;19;Empty progress bar:d;4;3072F;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;94E;E;S;21;{{152, 19}, {96, 20}}S;18;{{0, 0}, {96, 20}}S;18;progress-indicatord;3;100S;21;{{152, 43}, {96, 20}}S;21;{{152, 91}, {96, 20}}S;21;{{152, 67}, {96, 20}}S;21;{{20, 42}, {126, 17}}S;17;50% progress bar:S;21;{{20, 67}, {126, 17}}S;18;100% progress bar:S;21;{{20, 90}, {126, 17}}S;18;Indeterminate bar:S;22;{{20, 114}, {126, 17}}S;16;Regular spinner:S;22;{{154, 115}, {32, 32}}S;18;{{0, 0}, {32, 32}}S;22;{{154, 154}, {16, 16}}S;18;{{0, 0}, {16, 16}}S;22;{{20, 153}, {126, 17}}S;14;Small spinner:S;13;AppControllerS;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;63E;E;E;f;18;0.6862745098039216E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;49E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;50E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;51E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;55E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;56E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;57E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;47E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;50E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;59E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;60E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;61E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;62E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;63E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;64E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;65E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;26E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;67E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;67E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;68E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;72E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;82E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;10;$classnameS;19;CPProgressIndicatorK;8;$classesA;S;19;CPProgressIndicatorS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;66E;K;14;_indeterminateD;K;6;CP$UIDd;2;71E;K;6;_styleD;K;6;CP$UIDd;2;66E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;66E;K;14;_indeterminateD;K;6;CP$UIDd;2;71E;K;6;_styleD;K;6;CP$UIDd;2;66E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;91E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;66E;K;14;_indeterminateD;K;6;CP$UIDd;2;81E;K;6;_styleD;K;6;CP$UIDd;2;66E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;92E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;87E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;66E;K;14;_indeterminateD;K;6;CP$UIDd;2;71E;K;6;_styleD;K;6;CP$UIDd;2;66E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;94E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;95E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;96E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;98E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;99E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;100E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;102E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;77E;K;14;_indeterminateD;K;6;CP$UIDd;2;81E;K;6;_styleD;K;6;CP$UIDd;2;77E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;78E;K;14;_indeterminateD;K;6;CP$UIDd;2;81E;K;6;_styleD;K;6;CP$UIDd;2;77E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;106E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;78E;K;14;_indeterminateD;K;6;CP$UIDd;2;71E;K;6;_styleD;K;6;CP$UIDd;2;77E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;110E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;111E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;112E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;78E;K;14;_indeterminateD;K;6;CP$UIDd;2;71E;K;6;_styleD;K;6;CP$UIDd;2;77E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;113E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;114E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;78E;K;14;_indeterminateD;K;6;CP$UIDd;2;71E;K;6;_styleD;K;6;CP$UIDd;2;77E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;116E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;102E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;88E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;69E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;9;_minValueD;K;6;CP$UIDd;2;66E;K;9;_maxValueD;K;6;CP$UIDd;2;89E;K;12;_doubleValueD;K;6;CP$UIDd;2;66E;K;12;_controlSizeD;K;6;CP$UIDd;2;77E;K;14;_indeterminateD;K;6;CP$UIDd;2;71E;K;6;_styleD;K;6;CP$UIDd;2;77E;K;12;_isAnimatingD;K;6;CP$UIDd;1;0E;K;26;_isDisplayedWhenStoppedSetD;K;6;CP$UIDd;1;0E;K;23;_isDisplayedWhenStoppedD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;66E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;117E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;73E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;26E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;76E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;78E;K;6;$afontD;K;6;CP$UIDd;2;80E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;70E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;71E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;81E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;83E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;66E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;71E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;71E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;85E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;78E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;71E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;71E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;119E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;E;E;S;8;delegateS;15;fiftyPercentBarS;20;fiftyPercentCircularS;17;hundredPercentBarS;22;hundredPercentCircularS;9;theWindowS;21;twentyPercentCircularS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 176}, {268, 311}}S;21;{{0, 0}, {1440, 877}}d;1;7S;19;CPProgressIndicatord;1;0S;20;{{0, 0}, {268, 311}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;47E;E;E;S;6;normalS;6;{1, 1}F;S;21;{{19, 19}, {128, 17}}S;19;{{0, 0}, {128, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;1d;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;120E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;121E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;71E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;71E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;71E;E;T;S;19;Empty progress bar:d;1;4D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;84E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;122E;E;S;21;{{152, 19}, {96, 20}}S;18;{{0, 0}, {96, 20}}S;18;progress-indicatord;3;100S;21;{{152, 43}, {96, 20}}S;21;{{152, 91}, {96, 20}}S;21;{{152, 67}, {96, 20}}S;21;{{19, 42}, {128, 17}}S;17;50% progress bar:S;21;{{19, 67}, {128, 17}}S;18;100% progress bar:S;21;{{19, 90}, {128, 17}}S;18;Indeterminate bar:S;22;{{19, 114}, {128, 17}}S;16;Regular spinner:S;22;{{154, 115}, {32, 32}}S;18;{{0, 0}, {32, 32}}S;22;{{154, 154}, {16, 16}}S;18;{{0, 0}, {16, 16}}S;22;{{19, 153}, {128, 17}}S;14;Small spinner:S;22;{{19, 185}, {128, 17}}S;19;Empty circular bar:S;22;{{154, 185}, {16, 16}}S;22;{{19, 209}, {128, 17}}S;17;50% circular bar:S;22;{{154, 209}, {16, 16}}S;22;{{19, 234}, {128, 17}}S;18;100% circular bar:S;22;{{154, 234}, {16, 16}}S;22;{{154, 259}, {32, 32}}S;22;{{19, 266}, {128, 17}}S;17;20% circular bar:S;13;AppControllerS;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;77E;E;E;f;18;0.6862745098039216E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPProgressIndicator/Resources/MainMenu.xib b/Tests/Manual/CPProgressIndicator/Resources/MainMenu.xib index 169b47bf4..772510667 100644 --- a/Tests/Manual/CPProgressIndicator/Resources/MainMenu.xib +++ b/Tests/Manual/CPProgressIndicator/Resources/MainMenu.xib @@ -1,34 +1,31 @@ - + 1050 - 11D50 - 2182 - 1138.32 - 568.00 + 14E17e + 7702 + 1348.11 + 758.70 com.apple.InterfaceBuilder.CocoaPlugin - 2182 + 7702 - - YES + + NSCustomObject + NSProgressIndicator NSTextField NSTextFieldCell - NSWindowTemplate NSView - NSProgressIndicator - NSCustomObject - - - YES + NSWindowTemplate + + com.apple.InterfaceBuilder.CocoaPlugin - + PluginDependencyRecalculationVersion - - YES + NSApplication @@ -41,7 +38,7 @@ 7 2 - {{335, 390}, {266, 190}} + {{335, 390}, {268, 311}} 1946157056 CPProgressIndicator NSWindow @@ -50,12 +47,11 @@ 256 - - YES + 268 - {{152, 151}, {96, 20}} + {{152, 272}, {96, 20}} @@ -67,7 +63,7 @@ 268 - {{152, 127}, {96, 20}} + {{152, 248}, {96, 20}} @@ -79,7 +75,7 @@ 268 - {{152, 79}, {96, 20}} + {{152, 200}, {96, 20}} @@ -90,9 +86,8 @@ - 1292 - - {{154, 43}, {32, 32}} + 268 + {{154, 164}, {32, 32}} @@ -103,7 +98,7 @@ 268 - {{152, 103}, {96, 20}} + {{152, 224}, {96, 20}} @@ -115,18 +110,18 @@ 268 - {{17, 154}, {132, 17}} + {{17, 275}, {132, 17}} _NS:1505 YES - 68288064 + 68157504 71304192 Empty progress bar: - LucidaGrande + YES 13 1044 @@ -151,18 +146,20 @@ + NO + 1 268 - {{17, 131}, {132, 17}} + {{17, 252}, {132, 17}} _NS:1505 YES - 68288064 + 68157504 71304192 50% progress bar: @@ -171,18 +168,20 @@ + NO + 1 268 - {{17, 106}, {132, 17}} + {{17, 227}, {132, 17}} _NS:1505 YES - 68288064 + 68157504 71304192 100% progress bar: @@ -191,18 +190,20 @@ + NO + 1 268 - {{17, 83}, {132, 17}} + {{17, 204}, {132, 17}} _NS:1505 YES - 68288064 + 68157504 71304192 Indeterminate bar: @@ -211,18 +212,20 @@ + NO + 1 268 - {{17, 59}, {132, 17}} + {{17, 180}, {132, 17}} _NS:1505 YES - 68288064 + 68157504 71304192 Regular spinner: @@ -231,18 +234,20 @@ + NO + 1 268 - {{17, 20}, {132, 17}} + {{17, 141}, {132, 17}} _NS:1505 YES - 68288064 + 68157504 71304192 Small spinner: @@ -251,36 +256,167 @@ + NO + 1 - 1292 - - {{154, 20}, {16, 16}} + 268 + {{154, 141}, {16, 16}} - + _NS:926 20746 100 - - {266, 190} + + + 268 + {{17, 109}, {132, 17}} + + + + _NS:1505 + YES + + 68157504 + 71304192 + Empty circular bar: + + _NS:1505 + + + + + NO + 1 + + + + 268 + {{154, 110}, {16, 16}} + + + + _NS:926 + 20744 + 100 + + + + 268 + {{17, 85}, {132, 17}} + + + + _NS:1505 + YES + + 68157504 + 71304192 + 50% circular bar: + + _NS:1505 + + + + + NO + 1 + + + + 268 + {{154, 86}, {16, 16}} + + + + _NS:926 + 20744 + 100 + + + + 268 + {{17, 60}, {132, 17}} + + + + _NS:1505 + YES + + 68157504 + 71304192 + 100% circular bar: + + _NS:1505 + + + + + NO + 1 + + + + 268 + {{154, 61}, {16, 16}} + + + + _NS:926 + 20744 + 100 + + + + 268 + {{17, 28}, {132, 17}} + + + + _NS:1505 + YES + + 68157504 + 71304192 + 20% circular bar: + + _NS:1505 + + + + + NO + 1 + + + + 268 + {{154, 20}, {32, 32}} + + + _NS:926 + 20488 + 100 + + + {268, 311} - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} YES AppController - + - - YES + delegate @@ -313,15 +449,36 @@ 476 - + + + hundredPercentCircular + + + + 493 + + + + fiftyPercentCircular + + + + 494 + + + + twentyPercentCircular + + + + 495 + + - - YES + 0 - - YES - + @@ -346,17 +503,15 @@ 371 - - YES + - + 372 - - YES + @@ -369,7 +524,15 @@ - + + + + + + + + + @@ -378,107 +541,34 @@ - 460 - + 486 + + + + - 461 - + 487 + - 462 - + 488 + + + + + 481 + - - 463 - - - - - 464 - - - - - 465 - - - YES - - - - - - 466 - - - - - 467 - - - YES - - - - - - 468 - - - - - 469 - - - YES - - - - - - 470 - - - - - 471 - - - YES - - - - - - 472 - - - - - 473 - - - YES - - - - - - 474 - - - 477 - - YES + - + @@ -486,142 +576,251 @@ + + 469 + + + + + + + + 470 + + + + + 464 + + + + + 483 + + + + + + + + 485 + + + + + 461 + + + + + 467 + + + + + + + + 468 + + + + + 460 + + + + + 465 + + + + + + + + 466 + + + + + 463 + + + + + 484 + + + + + 462 + + + + + 473 + + + + + + + + 474 + + + 479 - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 372.IBPluginDependency - 450.IBPluginDependency - 460.IBPluginDependency - 461.IBPluginDependency - 462.IBPluginDependency - 463.IBPluginDependency - 464.IBPluginDependency - 465.IBPluginDependency - 466.IBPluginDependency - 467.IBPluginDependency - 468.IBPluginDependency - 469.IBPluginDependency - 470.IBPluginDependency - 471.IBPluginDependency - 472.IBPluginDependency - 473.IBPluginDependency - 474.IBPluginDependency - 477.IBPluginDependency - 478.IBPluginDependency - 479.IBPluginDependency - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{303, 221}, {480, 360}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - YES - - + + 480 + + + + + + + + 482 + + + + + 471 + + + + + + + + 472 + + + + + 490 + + + + + + + + 491 + + + + + 492 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {235, 366.5} + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + - - YES - - - + - 479 + 495 - - YES + AppController NSObject - - YES - - YES - fiftyPercentBar - hundredPercentBar + + NSProgressIndicator + NSProgressIndicator + NSProgressIndicator + NSProgressIndicator + NSProgressIndicator + + + + fiftyPercentBar + NSProgressIndicator - - YES - NSProgressIndicator - NSProgressIndicator + + fiftyPercentCircular + NSProgressIndicator - - - YES - - YES - fiftyPercentBar - hundredPercentBar + + hundredPercentBar + NSProgressIndicator - - YES - - fiftyPercentBar - NSProgressIndicator - - - hundredPercentBar - NSProgressIndicator - + + hundredPercentCircular + NSProgressIndicator - + + twentyPercentCircular + NSProgressIndicator + + IBProjectSource - ./Classes/AppController.h + ../.XcodeSupport/AppController.h - + 0 IBCocoaFramework + NO com.apple.InterfaceBuilder.CocoaPlugin.macosx com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - + YES 3 diff --git a/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.cib b/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.cib index dbcd112d5..d75841bbc 100644 --- a/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;69E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;56E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;70E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;71E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;66E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;64E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;63E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;76E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;44E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;47E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;49E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;51E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;56E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;70E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;85E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;86E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;87E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;88E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;89E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;90E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;91E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;36E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;93E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;94E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;95E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;107E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;111E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;113E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;114E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;115E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;116E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;120E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;121E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;122E;K;17;CPStepperMinValueD;K;6;CP$UIDd;3;123E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;124E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;123E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;129E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;131E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;132E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;133E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;134E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;135E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;136E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;121E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;123E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;137E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;138E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;131E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;121E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;123E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;137E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;141E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;142E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;131E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;143E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;141E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;121E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;123E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;122E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;106E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;145E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;131E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;146E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;147E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPHuggingPriorityD;K;6;CP$UIDd;3;148E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;150E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;151E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;152E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPHuggingPriorityD;K;6;CP$UIDd;3;148E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;153E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;150E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;69E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;156E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;6;$afontD;K;6;CP$UIDd;3;157E;K;7;$aimageD;K;6;CP$UIDd;3;159E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;160E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;56E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;162E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;164E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;56E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;165E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;56E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;166E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;167E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPHuggingPriorityD;K;6;CP$UIDd;3;148E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;168E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;150E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;169E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;170E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;171E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;172E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;173E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;123E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;174E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;123E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;123E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;171E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;119E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;177E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;123E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;123E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;178E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;179E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;180E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;181E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;182E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;183E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPHuggingPriorityD;K;6;CP$UIDd;3;148E;K;32;CPDoNotTranslateAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;150E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;184E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;108E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;185E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;8;delegateS;11;passedLabelS;17;segmentedControl1S;17;segmentedControl2S;9;theWindowS;11;addSegment:S;14;removeSegment:S;24;addSegmentWithFixedSize:S;12;changeLabel:S;12;changeImage:S;21;takeIntegerValueFrom:S;16;setTrackingMode:S;18;testWidthAndFrame:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;24;{{487, 191}, {745, 482}}S;22;{{0, 0}, {1680, 1027}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {745, 482}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;E;E;S;6;normalS;6;{1, 1}F;S;23;{{128, 196}, {225, 25}}S;19;{{0, 0}, {225, 25}}d;2;36S;6;buttonS;27;bordered+controlSizeRegulard;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;186E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;187E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;d;1;4S;31;Add segment with flexible widthS;0;d;2;14T;S;23;{{131, 229}, {218, 25}}S;19;{{0, 0}, {218, 25}}S;28;Add segment with fixed widthS;23;{{131, 262}, {218, 25}}S;16;SetSegmentCount:S;20;{{404, 227}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperS;18;controlSizeRegulard;2;50d;5;65540d;2;10d;1;1d;3;200S;22;{{353, 225}, {47, 22}}S;18;{{0, 0}, {47, 22}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;2;50D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;188E;E;S;23;{{131, 302}, {218, 25}}S;22;Change label At Index:S;23;{{131, 335}, {218, 25}}S;22;Change image At Index:S;20;{{404, 301}, {0, 0}}d;3;100S;22;{{353, 299}, {47, 22}}S;1;0S;20;{{404, 333}, {0, 0}}d;1;3S;22;{{353, 331}, {47, 22}}S;20;{{404, 260}, {0, 0}}S;22;{{353, 258}, {47, 22}}S;1;3S;20;{{27, 72}, {78, 17}}S;18;{{0, 0}, {78, 17}}S;10;{251, 750}S;13;Regular (cib)D;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;189E;E;S;21;{{27, 122}, {65, 17}}S;18;{{0, 0}, {65, 17}}S;11;Small (cib)S;22;{{138, 20}, {139, 25}}S;19;{{0, 0}, {139, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;186E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;187E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;4;nameD;K;6;CP$UIDd;3;190E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;191E;K;5;valueD;K;6;CP$UIDd;3;192E;E;d;2;12S;10;Select OneS;17;_popUpItemAction:d;7;1048576S;11;Select ManyS;9;MomentaryS;20;{{27, 22}, {95, 17}}S;18;{{0, 0}, {95, 17}}S;14;Tracking Mode:S;22;{{138, 121}, {89, 20}}S;18;{{0, 0}, {89, 20}}S;17;segmented-controlS;16;controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;186E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;193E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;E;E;S;22;{{138, 70}, {404, 25}}S;19;{{0, 0}, {404, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;E;E;S;23;{{131, 375}, {276, 25}}S;19;{{0, 0}, {276, 25}}S;39;Test width not affected by frame changeS;22;{{429, 377}, {98, 17}}S;18;{{0, 0}, {98, 17}}S;30;controlSizeRegular+placeholderS;13;AppControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;E;E;S;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;123E;E;E;S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;186E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;187E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;d;2;11D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;200E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;2;97E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;2;92E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;201E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;110E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;123E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;200E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;2;97E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;2;92E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;3;194E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;201E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;110E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;123E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;137E;E;f;18;0.6862745098039216S;5;helloS;5;worldE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;69E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;55E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;70E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;71E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;63E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;76E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;44E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;47E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;50E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;51E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;55E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;70E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;85E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;86E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;87E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;88E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;89E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;90E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;91E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;36E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;93E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;94E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;95E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;107E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;111E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;112E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;113E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;114E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;117E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;118E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;119E;K;17;CPStepperMinValueD;K;6;CP$UIDd;3;120E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;121E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;120E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;122E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;126E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;128E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;129E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;130E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;131E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;132E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;133E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;114E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;118E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;120E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;134E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;103E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;135E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;128E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;137E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;114E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;118E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;120E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;134E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;138E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;139E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;128E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;40E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;114E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;115E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;138E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;118E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;120E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;119E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;106E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;141E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;123E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;125E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;142E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;128E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;143E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;145E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;146E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;149E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;146E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;69E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;150E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;151E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;152E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;2;92E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;106E;K;6;$afontD;K;6;CP$UIDd;3;153E;K;7;$aimageD;K;6;CP$UIDd;3;155E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;156E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;157E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;55E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;158E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;120E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;160E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;55E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;55E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;158E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;162E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;163E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;164E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;146E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;165E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;166E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;167E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;168E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;169E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;120E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;170E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;120E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;120E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;171E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;172E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;167E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;116E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;173E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;120E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;120E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;174E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;175E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;176E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;42E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;177E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;178E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;124E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;179E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;103E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;110E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;97E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;97E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;146E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;103E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;106E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;97E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;97E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;180E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;181E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;101E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;102E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;92E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;96E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;97E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;92E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;182E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;108E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;97E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;109E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;92E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;110E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;103E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;92E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;183E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;108E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;184E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;8;delegateS;11;passedLabelS;17;segmentedControl1S;17;segmentedControl2S;9;theWindowS;11;addSegment:S;14;removeSegment:S;24;addSegmentWithFixedSize:S;12;changeLabel:S;12;changeImage:S;21;takeIntegerValueFrom:S;16;setTrackingMode:S;18;testWidthAndFrame:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;24;{{487, 191}, {745, 482}}S;22;{{0, 0}, {1680, 1027}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {745, 482}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;E;E;S;6;normalS;6;{1, 1}F;S;23;{{131, 229}, {218, 25}}S;19;{{0, 0}, {218, 25}}d;2;36S;6;buttonS;27;bordered+controlSizeRegulard;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;185E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;186E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;d;1;4S;28;Add segment with fixed widthS;0;d;2;14T;S;23;{{131, 262}, {218, 25}}S;16;SetSegmentCount:S;20;{{404, 227}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperS;18;controlSizeRegulard;2;50d;5;65540d;2;10d;1;1d;3;200S;22;{{353, 225}, {47, 22}}S;18;{{0, 0}, {47, 22}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;2;50D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;187E;E;S;23;{{131, 302}, {218, 25}}S;22;Change label At Index:S;23;{{131, 335}, {218, 25}}S;22;Change image At Index:S;20;{{404, 301}, {0, 0}}d;3;100S;22;{{353, 299}, {47, 22}}S;1;0S;20;{{404, 333}, {0, 0}}d;1;3S;22;{{353, 331}, {47, 22}}S;20;{{404, 260}, {0, 0}}S;22;{{353, 258}, {47, 22}}S;1;3S;20;{{27, 72}, {78, 17}}S;18;{{0, 0}, {78, 17}}S;13;Regular (cib)D;K;6;$classD;K;6;CP$UIDd;3;127E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;188E;E;S;21;{{27, 122}, {65, 17}}S;18;{{0, 0}, {65, 17}}S;11;Small (cib)S;22;{{138, 20}, {139, 25}}S;19;{{0, 0}, {139, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;185E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;186E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;154E;K;4;nameD;K;6;CP$UIDd;3;189E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;190E;K;5;valueD;K;6;CP$UIDd;3;191E;E;d;2;12S;10;Select OneS;17;_popUpItemAction:d;7;1048576S;11;Select ManyS;9;MomentaryS;20;{{27, 22}, {95, 17}}S;18;{{0, 0}, {95, 17}}S;14;Tracking Mode:S;22;{{138, 121}, {-4, 20}}S;18;{{0, 0}, {-4, 20}}S;17;segmented-controlS;16;controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;185E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;192E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;E;E;S;22;{{138, 70}, {197, 25}}S;19;{{0, 0}, {197, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;E;E;S;23;{{131, 375}, {276, 25}}S;19;{{0, 0}, {276, 25}}S;39;Test width not affected by frame changeS;22;{{429, 377}, {98, 17}}S;18;{{0, 0}, {98, 17}}S;30;controlSizeRegular+placeholderS;23;{{131, 196}, {225, 25}}S;19;{{0, 0}, {225, 25}}S;31;Add segment with flexible widthS;13;AppControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;E;E;S;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;120E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;120E;E;E;S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;104E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;185E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;186E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;97E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;97E;E;d;2;11D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;193E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;199E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;2;97E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;2;92E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;3;193E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;200E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;110E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;120E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;3;193E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;199E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;2;97E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;2;92E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;3;193E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;200E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;110E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;110E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;120E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;134E;E;f;18;0.6862745098039216S;5;helloS;5;worldE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.xib b/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.xib index 6f1f9c1e7..680506c6b 100644 --- a/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.xib +++ b/Tests/Manual/CPSegmentedControlTest/Resources/MainMenu.xib @@ -3,12 +3,12 @@ 1050 14C109 - 6250 + 6751 1344.72 757.30 com.apple.InterfaceBuilder.CocoaPlugin - 6250 + 6751 NSButton @@ -134,7 +134,7 @@ 268 - {{122, 258}, {237, 32}} + {{125, 258}, {237, 32}} @@ -623,7 +623,6 @@ {{125, 79}, {288, 32}} - _NS:9 YES @@ -847,7 +846,6 @@ 372 - @@ -868,6 +866,7 @@ + @@ -1324,176 +1323,6 @@ - - - NSActionCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSActionCell.h - - - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSButton - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSButton.h - - - - NSButtonCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSButtonCell.h - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMenuItemCell - NSButtonCell - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItemCell.h - - - - NSPopUpButton - NSButton - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButton.h - - - - NSPopUpButtonCell - NSMenuItemCell - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButtonCell.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSSegmentedCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSSegmentedCell.h - - - - NSSegmentedControl - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSSegmentedControl.h - - - - NSStepper - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSStepper.h - - - - NSStepperCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSStepperCell.h - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSTextFieldCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSTextFieldCell.h - - - - NSView - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - 0 IBCocoaFramework diff --git a/Tests/Manual/CPSplitViewTest/AppController.j b/Tests/Manual/CPSplitViewTest/AppController.j index 5a4559e22..f532861a8 100644 --- a/Tests/Manual/CPSplitViewTest/AppController.j +++ b/Tests/Manual/CPSplitViewTest/AppController.j @@ -7,6 +7,7 @@ */ @import +@import @implementation AppController : CPObject @@ -25,6 +26,8 @@ - (void)awakeFromCib { + [splitViewA setDelegate:self]; + // This is called when the cib is done loading. // You can implement this method on any object instantiated from a Cib. // It's a useful hook for setting up current UI values, and other things. @@ -67,4 +70,19 @@ [self setAutosaveName:nil]; } +@end + +@implementation AppController (Delegate) + +- (void)splitViewDidResizeSubviews:(CPNotification)aNotification +{ + console.error(@"splitViewDidResizeSubviews") +} + +- (void)splitViewWillResizeSubviews:(CPNotification)aNotification +{ + console.error(@"splitViewWillResizeSubviews") +} + + @end diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j b/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j index 1743b4913..60b443763 100644 --- a/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j +++ b/Tests/Manual/CPTextFieldEditingStyleTest/AppController.j @@ -13,6 +13,7 @@ { @outlet CPWindow theWindow; @outlet CPTextField textField; + @outlet CPTextField rightLeftTextField; } - (void)applicationDidFinishLaunching:(CPNotification)aNotification diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.cib b/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.cib index 16496ff10..f3a1a46ea 100644 --- a/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;130E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;131E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;132E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;129E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;123E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;135E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;118E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;115E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;59E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;74E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;75E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;53E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;96E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;111E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;131E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;170E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;171E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;172E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;173E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;58E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;58E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;173E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;176E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;177E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;178E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;182E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;183E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;184E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;185E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;65E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;65E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;186E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;188E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;189E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;190E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;191E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;69E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;69E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;192E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;193E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;69E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;196E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;197E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;200E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;65E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;204E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;77E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;77E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;204E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;207E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;208E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;209E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;210E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;211E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;212E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;213E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;214E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;215E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;218E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;88E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;219E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;227E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;233E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;234E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;235E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;95E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;95E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;235E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;237E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;240E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;241E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;95E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;101E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;243E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;245E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;222E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;223E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;106E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;248E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;251E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;252E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;110E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;252E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;255E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;258E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;259E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;262E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;179E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;265E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;120E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;174E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;120E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;55E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;265E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;267E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;120E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;175E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;122E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;269E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;270E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;271E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;272E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;273E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;231E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;258E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;125E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;124E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;274E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;275E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;275E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;276E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;181E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;126E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;274E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;279E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;280E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;125E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;281E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;282E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;283E;K;11;$aalignmentD;K;6;CP$UIDd;3;225E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;274E;K;6;$afontD;K;6;CP$UIDd;3;285E;K;7;$aimageD;K;6;CP$UIDd;3;287E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;181E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;274E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;288E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;289E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;180E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;181E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;290E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;274E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;179E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;225E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;274E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;128E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;274E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;291E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;292E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;125E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;281E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;293E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;294E;K;11;$aalignmentD;K;6;CP$UIDd;3;288E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;225E;K;6;$afontD;K;6;CP$UIDd;3;285E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;181E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;179E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;180E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;288E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;179E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;179E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;179E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;296E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;225E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;288E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;297E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;E;E;S;8;delegateS;9;textFieldS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;12;changeStyle:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;119E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;19;Quit NewApplicationS;1;qS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;70E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;105E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;121E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;E;E;S;6;normalS;6;{1, 1}S;22;{{136, 24}, {208, 25}}S;19;{{0, 0}, {208, 25}}d;2;36S;6;buttonS;8;borderedD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;284E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;298E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;181E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;286E;K;4;nameD;K;6;CP$UIDd;3;300E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;301E;K;5;valueD;K;6;CP$UIDd;3;302E;E;d;1;4S;29;Change style of the textFieldd;2;14S;22;{{132, 57}, {216, 29}}S;19;{{0, 0}, {216, 29}}S;9;textfieldS;28;bezeled+editable+placeholderD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;295E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;303E;E;S;13;AppControllerS;17;.Lucida Grande UId;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;284E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;298E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;181E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;222E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;132E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;133E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;134E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;135E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;131E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;137E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;124E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;138E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;74E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;75E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;71E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;54E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;97E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;133E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;173E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;174E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;175E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;176E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;59E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;59E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;176E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;179E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;181E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;185E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;186E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;59E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;188E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;66E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;66E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;189E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;192E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;194E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;70E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;195E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;196E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;197E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;198E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;200E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;201E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;206E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;207E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;78E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;78E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;207E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;209E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;210E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;211E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;212E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;213E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;214E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;215E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;216E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;218E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;220E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;221E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;222E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;89E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;89E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;222E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;227E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;230E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;233E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;236E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;89E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;237E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;238E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;96E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;96E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;238E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;240E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;243E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;245E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;96E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;102E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;102E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;246E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;225E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;249E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;228E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;229E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;102E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;251E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;107E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;107E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;78E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;251E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;107E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;255E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;111E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;255E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;258E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;259E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;260E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;111E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;261E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;262E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;265E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;266E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;182E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;184E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;267E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;115E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;177E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;56E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;271E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;178E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;123E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;272E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;273E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;274E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;275E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;276E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;234E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;261E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;126E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;278E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;278E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;279E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;280E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;127E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;282E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;283E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;126E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;284E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;285E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;286E;K;11;$aalignmentD;K;6;CP$UIDd;3;228E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;277E;K;6;$afontD;K;6;CP$UIDd;3;288E;K;7;$aimageD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;277E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;291E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;277E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;292E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;293E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;183E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;184E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;294E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;277E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;182E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;228E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;277E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;295E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;296E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;126E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;284E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;297E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;298E;K;11;$aalignmentD;K;6;CP$UIDd;3;291E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;228E;K;6;$afontD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;182E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;183E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;291E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;277E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;292E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;182E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;182E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;182E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;300E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;228E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;291E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;184E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;184E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;277E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;301E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;296E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;126E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;284E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;297E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;302E;K;11;$aalignmentD;K;6;CP$UIDd;3;291E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;228E;K;6;$afontD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;281E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;184E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;182E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;303E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;291E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;277E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;225E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;182E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;182E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;182E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;300E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;228E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;291E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;182E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;184E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;304E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;E;E;S;8;delegateS;18;rightLeftTextFieldS;9;textFieldS;9;theWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;12;changeStyle:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;120E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;19;Quit NewApplicationS;1;qS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;71E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;106E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;E;E;S;6;normalS;6;{1, 1}S;22;{{136, 27}, {208, 25}}S;19;{{0, 0}, {208, 25}}d;2;36S;6;buttonS;27;bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;287E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;305E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;306E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;184E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;289E;K;4;nameD;K;6;CP$UIDd;3;307E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;308E;K;5;valueD;K;6;CP$UIDd;3;309E;E;d;1;4d;2;-1S;29;Change style of the textFieldd;2;14S;22;{{132, 58}, {216, 22}}S;19;{{0, 0}, {216, 22}}S;9;textfieldS;47;bezeled+controlSizeRegular+editable+placeholderD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;299E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;310E;E;S;23;{{132, 131}, {216, 22}}S;35;bezeled+controlSizeRegular+editableS;13;Right to LeftS;13;AppControllerS;29;.Helvetica Neue DeskInterfaced;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;287E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;305E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;306E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;184E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;225E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib b/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib index c0c4fce32..972fddc26 100644 --- a/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib +++ b/Tests/Manual/CPTextFieldEditingStyleTest/Resources/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -11,7 +11,7 @@ - + @@ -306,11 +306,21 @@ + + + + + + + + + + diff --git a/Tests/Manual/CPUserNotificationTest/AppController.j b/Tests/Manual/CPUserNotificationTest/AppController.j new file mode 100644 index 000000000..3c4165fa4 --- /dev/null +++ b/Tests/Manual/CPUserNotificationTest/AppController.j @@ -0,0 +1,105 @@ +/* + * AppController.j + * CPUserNotificationTest + * + * Created by You on June 25, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +var icon = [[CPImage alloc] initWithContentsOfFile:@"Resources/Icon.png"]; + +@implementation AppController : CPObject +{ + CPUserNotification _scheduleUserNotification; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView]; + + var label = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; + + [label setStringValue:@"User Notification Test!"]; + [label setFont:[CPFont boldSystemFontOfSize:24.0]]; + + [label sizeToFit]; + + [label setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; + [label setCenter:[contentView center]]; + + [contentView addSubview:label]; + + var deliverButton = [CPButton buttonWithTitle:@"Deliver Notification"]; + [deliverButton setTarget:self]; + [deliverButton setAction:@selector(deliverUserNotification:)]; + [deliverButton setFrameOrigin:CGPointMake(10, 50)]; + [contentView addSubview:deliverButton] + + var scheduleButton = [CPButton buttonWithTitle:@"Schedule Notification"]; + [scheduleButton setTarget:self]; + [scheduleButton setAction:@selector(scheduleUserNotification:)]; + [scheduleButton setFrameOrigin:CGPointMake(10, 80)]; + [contentView addSubview:scheduleButton] + + var removeButton = [CPButton buttonWithTitle:@"Remove Scheduled Notifications"]; + [removeButton setTarget:self]; + [removeButton setAction:@selector(removeNotification:)]; + [removeButton setFrameOrigin:CGPointMake(10, 110)]; + [contentView addSubview:removeButton] + + [theWindow orderFront:self]; + + [[CPUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; +} + +- (void)deliverUserNotification:(id)sender +{ + var note = [CPUserNotification new]; + [note setTitle:@"This is a delivered notification"]; + [note setInformativeText:@"Informative text for the delivered notification"]; + [note setContentImage:icon]; + + [[CPUserNotificationCenter defaultUserNotificationCenter] deliverNotification:note]; +} + +- (void)scheduleUserNotification:(id)sender +{ + if (_scheduleUserNotification) + return; + + _scheduleUserNotification = [CPUserNotification new]; + [_scheduleUserNotification setTitle:@"This is a scheduled notification"]; + [_scheduleUserNotification setInformativeText:@"A notifications will pop up every 5 seconds"]; + [_scheduleUserNotification setDeliveryDate:[CPDate dateWithTimeIntervalSinceNow:1]]; + [_scheduleUserNotification setDeliveryRepeatInterval:5]; + [_scheduleUserNotification setContentImage:icon]; + + [[CPUserNotificationCenter defaultUserNotificationCenter] scheduleNotification:_scheduleUserNotification]; +} + +- (void)removeNotification:(id)sender +{ + [[CPUserNotificationCenter defaultUserNotificationCenter] removeScheduledNotification:_scheduleUserNotification]; + _scheduleUserNotification = nil; +} + +- (BOOL)userNotificationCenter:(id)n shouldPresentNotification:(id)aNotification +{ + return YES; +} + +- (void)userNotificationCenter:(CPUserNotificationCenter)center didDeliverNotification:(CPUserNotification)notification +{ + CPLog.warn(@"didDeliverNotification"); +} + +- (void)userNotificationCenter:(CPUserNotificationCenter)center didActivateNotification:(CPUserNotification)notification +{ + CPLog.warn(@"didActivateNotification"); +} + +@end diff --git a/Tests/Manual/CPUserNotificationTest/Info.plist b/Tests/Manual/CPUserNotificationTest/Info.plist new file mode 100644 index 000000000..d5e936c37 --- /dev/null +++ b/Tests/Manual/CPUserNotificationTest/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + CPUserNotificationTest + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPUserNotificationTest/Jakefile b/Tests/Manual/CPUserNotificationTest/Jakefile new file mode 100644 index 000000000..92fd159c5 --- /dev/null +++ b/Tests/Manual/CPUserNotificationTest/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPUserNotificationTest + * + * Created by You on June 25, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPUserNotificationTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPUserNotificationTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPUserNotificationTest"); + task.setIdentifier("com.yourcompany.CPUserNotificationTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPUserNotificationTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + configuration = ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + configuration = ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPUserNotificationTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPUserNotificationTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (configuration === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPUserNotificationTest/Resources/Icon.png b/Tests/Manual/CPUserNotificationTest/Resources/Icon.png new file mode 100644 index 000000000..42d8da14f Binary files /dev/null and b/Tests/Manual/CPUserNotificationTest/Resources/Icon.png differ diff --git a/Tests/Manual/CPUserNotificationTest/index-debug.html b/Tests/Manual/CPUserNotificationTest/index-debug.html new file mode 100644 index 000000000..4b4dd4189 --- /dev/null +++ b/Tests/Manual/CPUserNotificationTest/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPUserNotificationTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPUserNotificationTest/index.html b/Tests/Manual/CPUserNotificationTest/index.html new file mode 100644 index 000000000..8e40d3c80 --- /dev/null +++ b/Tests/Manual/CPUserNotificationTest/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPUserNotificationTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPUserNotificationTest/main.j b/Tests/Manual/CPUserNotificationTest/main.j new file mode 100644 index 000000000..ad304063f --- /dev/null +++ b/Tests/Manual/CPUserNotificationTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPUserNotificationTest + * + * Created by You on June 25, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/CPVisualEffectViewTest/AppController.j b/Tests/Manual/CPVisualEffectViewTest/AppController.j new file mode 100644 index 000000000..ee506899a --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/AppController.j @@ -0,0 +1,73 @@ +/* + * AppController.j + * CPVisualEffectViewTest + * + * Created by You on August 13, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +@implementation AppController : CPObject +{ + @outlet CPWindow window; + + @outlet CPVisualEffectView FXView1; + @outlet CPVisualEffectView FXView2; + @outlet CPVisualEffectView FXView3; + @outlet CPVisualEffectView FXView4; + @outlet CPVisualEffectView FXView5; + @outlet CPVisualEffectView FXView6; + + @outlet CPTextField field1; + @outlet CPTextField field2; + @outlet CPTextField field3; + @outlet CPTextField field4; + @outlet CPTextField field5; + @outlet CPTextField field6; + + @outlet CPButton button1; + @outlet CPButton button2; + @outlet CPButton button3; + @outlet CPButton button4; + @outlet CPButton button5; + @outlet CPButton button6; + +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ +} + +- (void)awakeFromCib +{ + var fields = [field1, field2, field3, field4, field5, field6]; + + for (var i = [fields count] - 1; i >= 0; i--) + [fields[i] setValue:[CPColor whiteColor] forThemeAttribute:@"text-color" inState:CPThemeStateAppearanceVibrantDark]; + + var buttons = [button1, button2, button3, button4, button5, button6]; + + for (var i = [buttons count] - 1; i >= 0; i--) + { + [buttons[i] setValue:[CPColor colorWithHexString:@"f3f3f3"] forThemeAttribute:@"bezel-color" inState:CPThemeStateAppearanceVibrantLight]; + [buttons[i] setValue:[CPColor colorWithHexString:@"333333"] forThemeAttribute:@"text-color" inState:CPThemeStateAppearanceVibrantLight]; + [buttons[i] setValue:[CPColor clearColor] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateAppearanceVibrantLight]; + + [buttons[i] setValue:[CPColor colorWithHexString:@"333333"] forThemeAttribute:@"bezel-color" inState:CPThemeStateAppearanceVibrantDark]; + [buttons[i] setValue:[CPColor colorWithHexString:@"999"] forThemeAttribute:@"text-color" inState:CPThemeStateAppearanceVibrantDark]; + [buttons[i] setValue:[CPColor clearColor] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateAppearanceVibrantDark]; + } +} + +- (IBAction)switch:(id)aSender +{ + var dark = [CPAppearance appearanceNamed:CPAppearanceNameVibrantDark], + light = [CPAppearance appearanceNamed:CPAppearanceNameVibrantLight], + appearance = ([[aSender effectiveAppearance] isEqual:dark]) ? light : dark; + + [[aSender superview] setAppearance:appearance]; +} + +@end diff --git a/Tests/Manual/CPVisualEffectViewTest/Info.plist b/Tests/Manual/CPVisualEffectViewTest/Info.plist new file mode 100644 index 000000000..074f91770 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPVisualEffectViewTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2015, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPVisualEffectViewTest/Jakefile b/Tests/Manual/CPVisualEffectViewTest/Jakefile new file mode 100644 index 000000000..690674428 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPVisualEffectViewTest + * + * Created by You on August 13, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPVisualEffectViewTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPVisualEffectViewTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPVisualEffectViewTest"); + task.setIdentifier("com.yourcompany.CPVisualEffectViewTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPVisualEffectViewTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + configuration = ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + configuration = ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPVisualEffectViewTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPVisualEffectViewTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (configuration === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.cib b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.cib new file mode 100644 index 000000000..0e716eed0 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.cib @@ -0,0 +1,7 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;73E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;74E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;75E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;76E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;55E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;59E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;71E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;68E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;61E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;73E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;64E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;60E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;66E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;63E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;69E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;43E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;50E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;58E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;43E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;97E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;98E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;99E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;100E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;101E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;102E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;103E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;104E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;47E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;106E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;106E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;107E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;111E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;47E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;116E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;117E;K;6;$afontD;K;6;CP$UIDd;3;119E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;120E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;121E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;124E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;117E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;116E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;110E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;110E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;98E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;99E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;125E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;126E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;102E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;127E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;104E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;128E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;128E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;52E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;128E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;128E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;105E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;131E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;133E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;3;105E;E;D;K;10;$classnameS;18;CPVisualEffectViewK;8;$classesA;S;18;CPVisualEffectViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;134E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;136E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;3;138E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;3;139E;K;9;_materialD;K;6;CP$UIDd;3;105E;K;6;_stateD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;55E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;117E;K;6;$afontD;K;6;CP$UIDd;3;142E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;120E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;143E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;124E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;117E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;110E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;110E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;120E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;55E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;147E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;148E;K;7;$aimageD;K;6;CP$UIDd;3;150E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;152E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;153E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;120E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;117E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;154E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;155E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;3;138E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;3;139E;K;9;_materialD;K;6;CP$UIDd;3;105E;K;6;_stateD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;59E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;59E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;117E;K;6;$afontD;K;6;CP$UIDd;3;148E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;120E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;156E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;124E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;117E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;110E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;110E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;59E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;59E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;147E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;157E;K;7;$aimageD;K;6;CP$UIDd;3;158E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;152E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;153E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;120E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;117E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;159E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;160E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;3;161E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;3;139E;K;9;_materialD;K;6;CP$UIDd;3;105E;K;6;_stateD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;62E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;117E;K;6;$afontD;K;6;CP$UIDd;3;157E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;120E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;162E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;124E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;117E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;110E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;110E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;62E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;147E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;163E;K;7;$aimageD;K;6;CP$UIDd;3;164E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;152E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;153E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;120E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;117E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;165E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;166E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;3;138E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;3;139E;K;9;_materialD;K;6;CP$UIDd;3;105E;K;6;_stateD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;65E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;65E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;117E;K;6;$afontD;K;6;CP$UIDd;3;163E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;120E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;167E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;124E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;117E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;110E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;110E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;65E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;65E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;147E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;168E;K;7;$aimageD;K;6;CP$UIDd;3;169E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;152E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;153E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;120E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;117E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;170E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;171E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;3;161E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;3;139E;K;9;_materialD;K;6;CP$UIDd;3;105E;K;6;_stateD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;68E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;68E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;117E;K;6;$afontD;K;6;CP$UIDd;3;168E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;120E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;172E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;124E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;117E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;110E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;110E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;68E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;68E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;147E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;173E;K;7;$aimageD;K;6;CP$UIDd;3;174E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;152E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;153E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;120E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;117E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;135E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;3;161E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;3;139E;K;9;_materialD;K;6;CP$UIDd;3;105E;K;6;_stateD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;48E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;140E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;141E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;114E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;115E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;117E;K;6;$afontD;K;6;CP$UIDd;3;173E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;120E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;177E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;110E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;110E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;124E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;117E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;117E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;110E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;110E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;71E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;105E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;71E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;146E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;147E;K;11;$aalignmentD;K;6;CP$UIDd;3;117E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;105E;K;6;$afontD;K;6;CP$UIDd;3;178E;K;7;$aimageD;K;6;CP$UIDd;3;179E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;109E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;105E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;122E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;152E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;110E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;153E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;105E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;120E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;117E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;105E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;45E;E;E;S;8;delegateS;7;FXView1S;7;FXView2S;7;FXView3S;7;FXView4S;7;FXView5S;7;FXView6S;7;button1S;7;button2S;7;button3S;7;button4S;7;button5S;7;button6S;6;field1S;6;field2S;6;field3S;6;field4S;6;field5S;6;field6S;6;windowS;7;switch:S;13;AppControllerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1618478080S;22;{{100, 88}, {181, 67}}S;21;{{0, 0}, {1440, 877}}d;2;15S;6;Windowd;1;0S;19;{{0, 0}, {181, 67}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;E;E;S;6;normalS;6;{1, 1}F;S;21;{{20, 25}, {141, 17}}S;19;{{0, 0}, {141, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;4d;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;T;S;23;Click me to loose focusd;2;-1D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;123E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;181E;E;d;10;1886912512S;24;{{303, 166}, {834, 545}}d;1;7S;20;{{0, 0}, {834, 545}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;71E;E;E;d;2;18d;1;3D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;182E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;183E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;185E;E;S;22;{{87, 15}, {215, 254}}S;20;{{0, 0}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;E;E;D;K;10;$classnameS;12;CPAppearanceK;8;$classesA;S;12;CPAppearanceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;5;_nameD;K;6;CP$UIDd;3;186E;K;15;_allowsVibrancyD;K;6;CP$UIDd;1;0E;E;d;1;1S;22;{{20, 110}, {175, 34}}S;19;{{0, 0}, {175, 34}}D;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;120E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;S;32;Vibrant Light +Follows Key WindowS;21;{{73, 213}, {69, 25}}S;18;{{0, 0}, {69, 25}}S;6;buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;120E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;187E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;188E;K;5;valueD;K;6;CP$UIDd;3;189E;E;S;6;SwitchS;0;d;2;14S;23;{{310, 15}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;E;E;S;20;Vibrant Light +ActiveD;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;120E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;187E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;188E;K;5;valueD;K;6;CP$UIDd;3;189E;E;S;24;{{310, 277}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;137E;K;5;_nameD;K;6;CP$UIDd;3;190E;K;15;_allowsVibrancyD;K;6;CP$UIDd;1;0E;E;S;19;Vibrant Dark +ActiveD;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;120E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;187E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;188E;K;5;valueD;K;6;CP$UIDd;3;189E;E;S;23;{{533, 15}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;E;E;S;22;Vibrant Light +InactiveD;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;120E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;187E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;188E;K;5;valueD;K;6;CP$UIDd;3;189E;E;S;24;{{533, 277}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;E;E;S;21;Vibrant Dark +InactiveD;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;120E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;187E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;188E;K;5;valueD;K;6;CP$UIDd;3;189E;E;S;23;{{87, 277}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;E;E;S;31;Vibrant Dark +Follows Key WindowD;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;180E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;120E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;120E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;187E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;188E;K;5;valueD;K;6;CP$UIDd;3;189E;E;S;28;_CPFontSystemFacePlaceholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;139E;E;E;S;7;CPImageS;14;background.jpgD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;184E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;193E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;152E;K;9;frameworkD;K;6;CP$UIDd;3;152E;E;E;S;28;CPAppearanceNameVibrantLightS;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;118E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;194E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;195E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;110E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;110E;E;S;27;CPAppearanceNameVibrantDarkf;18;0.6862745098039216D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;192E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;196E;E;S;18;.AppleSystemUIFontd;2;13S;32;{"width":245.76,"height":160.32}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.xib b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.xib new file mode 100644 index 000000000..650cd38a2 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.xib @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vibrant Light +Follows Key Window + + + + + + + + + + + + + + + + + + + Vibrant Light +Active + + + + + + + + + + + + + + + + + + + Vibrant Dark +Active + + + + + + + + + + + + + + + + + + + Vibrant Light +Inactive + + + + + + + + + + + + + + + + + + + Vibrant Dark +Inactive + + + + + + + + + + + + + + + + + + + Vibrant Dark +Follows Key Window + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPVisualEffectViewTest/Resources/background.jpg b/Tests/Manual/CPVisualEffectViewTest/Resources/background.jpg new file mode 100644 index 000000000..0fe64744a Binary files /dev/null and b/Tests/Manual/CPVisualEffectViewTest/Resources/background.jpg differ diff --git a/Tests/Manual/CPVisualEffectViewTest/index-debug.html b/Tests/Manual/CPVisualEffectViewTest/index-debug.html new file mode 100644 index 000000000..c4d1557d3 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPVisualEffectViewTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPVisualEffectViewTest/index.html b/Tests/Manual/CPVisualEffectViewTest/index.html new file mode 100644 index 000000000..af62486e2 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPVisualEffectViewTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPVisualEffectViewTest/main.j b/Tests/Manual/CPVisualEffectViewTest/main.j new file mode 100644 index 000000000..03e6d6d85 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPVisualEffectViewTest + * + * Created by You on August 13, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib b/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib index 148440c53..1d9e4c7ce 100644 --- a/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib +++ b/Tests/Manual/Nib2CibAlignment/Resources/MainMenu.cib @@ -1 +1 @@ -280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;135E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;207E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;208E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;158E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;157E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;211E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;155E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;213E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;156E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;156E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;215E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;153E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;217E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;154E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;219E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;220E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;199E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;207E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;223E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;224E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;225E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;226E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;227E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;228E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;229E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;28E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;231E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;10;$classnameS;5;CPBoxK;8;$classesA;S;5;CPBoxS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;237E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;242E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;246E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;247E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;249E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;250E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;251E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;252E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;253E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;255E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;257E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;258E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;259E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;260E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;261E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;262E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;263E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;264E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;265E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;266E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;267E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;268E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;270E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;271E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;272E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;273E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;274E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;275E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;276E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;277E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;278E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;279E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;280E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;281E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;282E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;283E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;286E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;287E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;289E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;291E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;292E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;293E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;296E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;297E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;300E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;301E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;302E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;303E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;304E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;305E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;306E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;307E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;308E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;309E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;310E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;311E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;312E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;313E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;314E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;315E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;316E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;315E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;318E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;319E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;320E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;321E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;322E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;323E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;324E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;325E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;326E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;327E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;328E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;330E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;331E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;332E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;336E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;340E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;347E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;349E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;351E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;353E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;357E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;359E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;361E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;363E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;365E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;366E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;368E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;369E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;370E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;372E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;373E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;374E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;375E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;376E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;378E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;380E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;381E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;382E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;384E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;385E;K;7;$aimageD;K;6;CP$UIDd;3;386E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;388E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;389E;K;7;$aimageD;K;6;CP$UIDd;3;390E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;391E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;393E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;395E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;397E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;398E;K;7;$aimageD;K;6;CP$UIDd;3;399E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;401E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;402E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;404E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;405E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;406E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;407E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;408E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;411E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;412E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;413E;K;7;$aimageD;K;6;CP$UIDd;3;414E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;416E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;417E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;7;$aimageD;K;6;CP$UIDd;3;419E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;420E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;424E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;426E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;427E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;429E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;430E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;432E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;433E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;434E;K;7;$aimageD;K;6;CP$UIDd;3;435E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;436E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;437E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;438E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;439E;K;7;$aimageD;K;6;CP$UIDd;3;440E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;441E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;443E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;444E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;445E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;446E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;447E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;448E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;449E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;451E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;453E;K;7;$aimageD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;455E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;456E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;458E;K;7;$aimageD;K;6;CP$UIDd;3;459E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;201E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;460E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;462E;K;7;$aimageD;K;6;CP$UIDd;3;463E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;202E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;462E;K;7;$aimageD;K;6;CP$UIDd;3;470E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;203E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;336E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;472E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;204E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;473E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;474E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;475E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;476E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;205E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;477E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;349E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;478E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;206E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;480E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;481E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;482E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;135E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;135E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;135E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;483E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;484E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;486E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;487E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;490E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;484E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;491E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;492E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;493E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;495E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;497E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;498E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;499E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;500E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;501E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;503E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;504E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;505E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;508E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;510E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;511E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;512E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;513E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;514E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;515E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;512E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;516E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;517E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;518E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;520E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;522E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;523E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;505E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;525E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;526E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;527E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;530E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;534E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;536E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;537E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;539E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;540E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;541E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;527E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;542E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;543E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;546E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;548E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;550E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;551E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;548E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;552E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;553E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;556E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;557E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;555E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;558E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;559E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;560E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;561E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;562E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;560E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;563E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;564E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;565E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;566E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;567E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;568E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;566E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;569E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;570E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;565E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;571E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;572E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;573E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;571E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;574E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;543E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;546E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;575E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;576E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;577E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;575E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;578E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;579E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;580E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;581E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;342E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;582E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;579E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;580E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;581E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;342E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;582E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;584E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;579E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;580E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;581E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;342E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;582E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;585E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;586E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;588E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;590E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;586E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;591E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;592E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;593E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;594E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;595E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;593E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;596E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;597E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;598E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;599E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;600E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;598E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;601E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;602E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;603E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;604E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;605E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;606E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;607E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;608E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;609E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;610E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;608E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;611E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;612E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;613E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;615E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;617E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;618E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;619E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;620E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;621E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;622E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;624E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;626E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;627E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;628E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;629E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;630E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;631E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;632E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;633E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;624E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;634E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;635E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;636E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;628E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;637E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;638E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;639E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;631E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;640E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;641E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;642E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;643E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;644E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;645E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;646E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;647E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPSearchFieldK;8;$classesA;S;13;CPSearchFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;195E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;648E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;649E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;650E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;651E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;236E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;346E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;3;195E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;653E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;654E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;650E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;655E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;236E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;346E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;3;195E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;656E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;657E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;650E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;658E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;236E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;346E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;659E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;661E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;662E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;663E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;664E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;665E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;666E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;668E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;669E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;670E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;671E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;672E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;673E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;27;{{335, -411}, {1137, 1049}}S;22;{{0, 0}, {1680, 1028}}d;1;7S;6;Windowd;1;0S;22;{{0, 1}, {1137, 1049}}S;22;{{0, 0}, {1137, 1049}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;E;E;S;6;normalS;6;{1, 1}F;S;20;{{0, 18}, {1137, 5}}S;19;{{0, 0}, {1137, 5}}d;2;34S;3;boxD;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;d;1;2d;1;3S;3;BoxS;20;{{0, 58}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;20;{{0, 99}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 139}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 177}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 215}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 255}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 296}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 331}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 372}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 403}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 438}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 530}, {1137, 5}}d;2;10D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 570}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 611}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 651}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 689}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 727}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 767}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 808}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 847}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 887}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 927}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 969}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;20;{{18, 0}, {5, 1049}}S;19;{{0, 0}, {5, 1049}}d;2;20D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;20;{{93, 971}, {5, 88}}S;17;{{0, 0}, {5, 88}}d;2;12D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{329, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{438, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{247, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{266, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{359, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{476, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{386, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{625, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;d;2;17D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{485, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{724, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{749, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{854, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{882, 0}, {5, 1055}}S;19;{{0, 0}, {5, 1055}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;22;{{1111, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;22;{{268, 298}, {94, 25}}S;18;{{0, 0}, {94, 25}}d;2;36S;6;buttonS;25;bordered+controlSizeSmallD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;676E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;d;1;4d;1;1S;5;SmallS;0;d;2;14T;S;22;{{388, 298}, {91, 25}}S;18;{{0, 0}, {91, 25}}S;24;bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;442E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;4;MiniS;22;{{20, 101}, {230, 25}}S;19;{{0, 0}, {230, 25}}S;36;bordered+controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;681E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;CPSmallSquareBezelStyleS;22;{{20, 141}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;21;CPRoundRectBezelStyleS;22;{{268, 141}, {94, 25}}S;34;bordered+controlSizeSmall+selectedD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;22;{{388, 141}, {91, 25}}S;33;bordered+controlSizeMini+selectedD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;21;{{20, 60}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;27;CPTexturedRoundedBezelStyleS;21;{{268, 60}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;21;{{388, 60}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;21;{{21, 20}, {228, 25}}S;19;{{0, 0}, {228, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;26;CPTexturedSquareBezelStyleS;21;{{268, 20}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;21;{{388, 20}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;22;{{20, 179}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;20;CPRecessedBezelStyleS;22;{{268, 179}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{388, 179}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;22;{{20, 217}, {230, 25}}S;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;28;CPShadowlessSquareBezelStyleS;22;{{20, 257}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;25;CPRegularSquareBezelStyleS;22;{{20, 810}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;19;CPRoundedBezelStyleS;22;{{20, 613}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 653}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{20, 572}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 532}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 691}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{20, 729}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 769}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;23;{{884, 298}, {230, 25}}d;2;33S;36;bordered+controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 101}, {230, 25}}S;45;bordered+controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 141}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{884, 60}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{885, 20}, {228, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 179}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;23;{{884, 217}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 257}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;23;{{884, 810}, {230, 25}}d;1;9D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 613}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 653}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;23;{{884, 572}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 532}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 691}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;23;{{884, 729}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 769}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;22;{{20, 440}, {230, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;681E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;6;Item 1S;17;_popUpItemAction:d;7;1048576S;6;Item 2S;6;Item 3S;23;{{884, 440}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{268, 440}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;23;{{751, 440}, {106, 25}}S;19;{{0, 0}, {106, 25}}S;34;bordered+controlSizeSmall+disabledD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;22;{{388, 440}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;23;{{627, 440}, {100, 25}}S;19;{{0, 0}, {100, 25}}S;33;bordered+controlSizeMini+disabledD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;22;{{16, 330}, {238, 22}}S;19;{{0, 0}, {238, 22}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;6;TargetD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;684E;E;S;23;{{880, 330}, {238, 22}}S;56;bezeled+controlSizeRegular+disabled+editable+placeholderS;23;{{265, 330}, {101, 26}}S;19;{{0, 0}, {101, 26}}S;45;bezeled+controlSizeSmall+editable+placeholderS;23;{{748, 330}, {113, 26}}S;19;{{0, 0}, {113, 26}}S;54;bezeled+controlSizeSmall+disabled+editable+placeholderS;22;{{384, 330}, {99, 23}}S;18;{{0, 0}, {99, 23}}S;44;bezeled+controlSizeMini+editable+placeholderS;23;{{623, 330}, {108, 23}}S;19;{{0, 0}, {108, 23}}S;53;bezeled+controlSizeMini+disabled+editable+placeholderS;22;{{16, 846}, {238, 26}}S;19;{{0, 0}, {238, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;d;1;5S;23;{{264, 846}, {102, 22}}S;19;{{0, 0}, {102, 22}}S;61;bezeled+button-bordered+controlSizeSmall+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;23;{{747, 846}, {114, 22}}S;19;{{0, 0}, {114, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;22;{{384, 846}, {99, 19}}S;18;{{0, 0}, {99, 19}}S;60;bezeled+button-bordered+controlSizeMini+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;23;{{623, 846}, {108, 19}}S;19;{{0, 0}, {108, 19}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;23;{{880, 846}, {238, 26}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;22;{{20, 889}, {230, 17}}S;19;{{0, 0}, {230, 17}}S;18;controlSizeRegularS;5;LabelS;22;{{268, 889}, {94, 14}}S;18;{{0, 0}, {94, 14}}S;16;controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;686E;E;S;23;{{751, 889}, {106, 14}}S;19;{{0, 0}, {106, 14}}S;22;{{388, 889}, {91, 11}}S;18;{{0, 0}, {91, 11}}S;15;controlSizeMiniS;23;{{627, 889}, {100, 11}}S;19;{{0, 0}, {100, 11}}S;23;{{884, 889}, {230, 17}}S;22;{{20, 926}, {230, 29}}S;19;{{0, 0}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;687E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;22;{{268, 926}, {93, 29}}S;18;{{0, 0}, {93, 29}}S;33;bezeled+bordered+controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;23;{{751, 925}, {105, 29}}S;19;{{0, 0}, {105, 29}}D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;22;{{388, 926}, {91, 29}}S;18;{{0, 0}, {91, 29}}S;32;bezeled+bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;23;{{627, 926}, {100, 29}}S;19;{{0, 0}, {100, 29}}D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;23;{{884, 926}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;19;{{20, 374}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperd;5;65540d;3;100S;20;{{269, 374}, {0, 0}}S;20;{{389, 375}, {0, 0}}S;21;{{17, 402}, {71, 21}}S;18;{{0, 0}, {71, 21}}S;9;check-boxS;27;controlSizeRegular+selectedS;5;CheckS;22;{{880, 402}, {71, 21}}S;36;controlSizeRegular+disabled+selectedS;22;{{266, 402}, {62, 21}}S;18;{{0, 0}, {62, 21}}S;25;controlSizeSmall+selectedS;22;{{749, 402}, {62, 21}}S;34;controlSizeSmall+disabled+selectedS;22;{{386, 400}, {97, 22}}S;18;{{0, 0}, {97, 22}}S;24;controlSizeMini+selectedS;22;{{625, 400}, {97, 22}}S;33;controlSizeMini+disabled+selectedS;22;{{20, 298}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{268, 613}, {94, 40}}S;18;{{0, 0}, {94, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;690E;D;K;6;CP$UIDd;3;691E;E;E;S;22;{{388, 613}, {91, 40}}S;18;{{0, 0}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;692E;D;K;6;CP$UIDd;3;693E;E;E;S;22;{{388, 653}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;694E;D;K;6;CP$UIDd;3;695E;E;E;S;22;{{267, 529}, {97, 23}}S;18;{{0, 0}, {97, 23}}S;5;radioS;7;RegularD;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;696E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{386, 527}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;697E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{386, 565}, {96, 29}}S;18;{{0, 0}, {96, 29}}D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;698E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;21;{{21, 971}, {76, 25}}S;18;{{0, 0}, {76, 25}}S;17;segmented-controlD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;700E;D;K;6;CP$UIDd;3;701E;E;E;S;22;{{268, 971}, {63, 20}}S;18;{{0, 0}, {63, 20}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;702E;D;K;6;CP$UIDd;3;703E;E;E;S;22;{{388, 971}, {53, 15}}S;18;{{0, 0}, {53, 15}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;704E;D;K;6;CP$UIDd;3;705E;E;E;S;22;{{884, 971}, {76, 25}}S;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;706E;D;K;6;CP$UIDd;3;707E;E;E;S;22;{{751, 971}, {63, 20}}S;25;controlSizeSmall+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;708E;D;K;6;CP$UIDd;3;709E;E;E;S;22;{{627, 971}, {53, 15}}S;24;controlSizeMini+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;710E;D;K;6;CP$UIDd;3;711E;E;E;S;21;{{677, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{812, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{957, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;23;{{483, 214}, {149, 29}}S;19;{{0, 0}, {149, 29}}S;11;searchfieldS;53;bezeled+controlSizeSmall+editable+placeholder+roundedd;3;254S;23;{{483, 254}, {149, 25}}S;19;{{0, 0}, {149, 25}}S;52;bezeled+controlSizeMini+editable+placeholder+roundedS;23;{{484, 177}, {148, 32}}S;19;{{0, 0}, {148, 32}}S;55;bezeled+controlSizeRegular+editable+placeholder+roundedS;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;E;E;S;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;712E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;714E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;715E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;716E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;717E;E;S;22;{"width":0,"height":0}S;29;.Helvetica Neue DeskInterfaced;2;11S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;676E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;442E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;d;2;13D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;681E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;E;E;S;4;ItemD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;718E;D;K;6;CP$UIDd;3;718E;D;K;6;CP$UIDd;3;718E;D;K;6;CP$UIDd;3;342E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;E;E;d;15;-62135510400000d;14;64092297600000D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;342E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;719E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;719E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;722E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;719E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;728E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;179E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;342E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;729E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;179E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;730E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;731E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;179E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;732E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;179E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;733E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;731E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;180E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;342E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;734E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;734E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;180E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;735E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;180E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;737E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;734E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;180E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;738E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;236E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;236E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;f;18;0.6862745098039216S;18;{{0, 0}, {58, 18}}d;2;18D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;745E;E;S;46;bordered+controlSizeRegular+roundRect+selectedS;5;Radiof;3;0.5f;4;0.05D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;746E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;690E;E;S;19;{{0, 20}, {58, 18}}S;37;bordered+controlSizeRegular+roundRectS;18;{{0, 0}, {53, 18}}S;44;bordered+controlSizeSmall+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;747E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;692E;E;S;19;{{0, 20}, {53, 18}}S;35;bordered+controlSizeSmall+roundRectS;18;{{0, 0}, {48, 18}}S;43;bordered+controlSizeMini+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;748E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;694E;E;S;19;{{0, 20}, {48, 18}}S;34;bordered+controlSizeMini+roundRectS;1;TS;4;Testf;12;0.1843137294f;12;0.6745098233f;12;0.3843137622f;4;0.71D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;230E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;690E;D;K;6;CP$UIDd;3;691E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;692E;D;K;6;CP$UIDd;3;693E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;694E;D;K;6;CP$UIDd;3;695E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;135E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;207E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;208E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;158E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;157E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;211E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;155E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;213E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;156E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;156E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;215E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;153E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;217E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;154E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;219E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;220E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;199E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;21E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;26E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;207E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;223E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;224E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;225E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;226E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;227E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;228E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;229E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;28E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;231E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;232E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;233E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;10;$classnameS;5;CPBoxK;8;$classesA;S;5;CPBoxS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;237E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;242E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;246E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;247E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;249E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;250E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;251E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;252E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;253E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;255E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;257E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;258E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;259E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;260E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;261E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;262E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;263E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;264E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;265E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;266E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;239E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;267E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;268E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;270E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;271E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;272E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;273E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;274E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;275E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;276E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;277E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;278E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;279E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;280E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;281E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;282E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;283E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;286E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;287E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;289E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;290E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;291E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;292E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;293E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;296E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;297E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;300E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;301E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;302E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;303E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;304E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;305E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;306E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;307E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;308E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;309E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;310E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;311E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;312E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;313E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;314E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;315E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;316E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;315E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;318E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;319E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;320E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;321E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;322E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;323E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;324E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;325E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;326E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;327E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;328E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;329E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;330E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;294E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;317E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;331E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;332E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;336E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;340E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;347E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;349E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;351E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;353E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;357E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;359E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;361E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;363E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;365E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;366E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;368E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;369E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;370E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;372E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;373E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;374E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;375E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;376E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;378E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;380E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;381E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;382E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;384E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;385E;K;7;$aimageD;K;6;CP$UIDd;3;386E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;388E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;364E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;389E;K;7;$aimageD;K;6;CP$UIDd;3;390E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;391E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;367E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;393E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;395E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;397E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;398E;K;7;$aimageD;K;6;CP$UIDd;3;399E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;401E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;402E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;404E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;405E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;406E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;407E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;408E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;411E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;412E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;413E;K;7;$aimageD;K;6;CP$UIDd;3;414E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;416E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;417E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;7;$aimageD;K;6;CP$UIDd;3;419E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;420E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;424E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;426E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;427E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;429E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;430E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;432E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;433E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;434E;K;7;$aimageD;K;6;CP$UIDd;3;435E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;436E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;437E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;438E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;439E;K;7;$aimageD;K;6;CP$UIDd;3;440E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;441E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;443E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;444E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;445E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;358E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;446E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;360E;K;7;$aimageD;K;6;CP$UIDd;3;447E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;362E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;448E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;449E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;371E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;451E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;379E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;355E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;453E;K;7;$aimageD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;387E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;299E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;455E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;456E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;396E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;458E;K;7;$aimageD;K;6;CP$UIDd;3;459E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;400E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;201E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;460E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;462E;K;7;$aimageD;K;6;CP$UIDd;3;463E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;202E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;422E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;462E;K;7;$aimageD;K;6;CP$UIDd;3;470E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;203E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;336E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;472E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;204E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;473E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;474E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;475E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;7;$aimageD;K;6;CP$UIDd;3;476E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;205E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;477E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;349E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;478E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;206E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;480E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;461E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;481E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;341E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;7;$aimageD;K;6;CP$UIDd;3;482E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;299E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;135E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;342E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;467E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;135E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;135E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;465E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;466E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;483E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;484E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;486E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;487E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;490E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;484E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;491E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;492E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;493E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;495E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;497E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;498E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;499E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;500E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;501E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;503E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;504E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;505E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;508E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;510E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;511E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;512E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;513E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;514E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;515E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;512E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;516E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;517E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;518E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;520E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;522E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;519E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;523E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;505E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;506E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;525E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;236E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;236E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;509E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;346E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;526E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;527E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;530E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;534E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;536E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;537E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;539E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;540E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;541E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;527E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;485E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;346E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;529E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;236E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;533E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;236E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;542E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;543E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;546E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;548E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;550E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;551E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;548E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;552E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;553E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;556E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;557E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;555E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;558E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;559E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;560E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;561E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;562E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;560E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;563E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;564E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;565E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;566E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;567E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;568E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;566E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;569E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;570E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;565E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;571E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;572E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;573E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;571E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;574E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;543E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;544E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;546E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;575E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;230E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;230E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;230E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;549E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;576E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;577E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;575E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;544E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;346E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;578E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;579E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;580E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;581E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;342E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;582E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;579E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;580E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;581E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;342E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;582E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;584E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;579E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;580E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;581E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;342E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;582E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;346E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;585E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;586E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;588E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;590E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;586E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;591E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;592E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;593E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;594E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;595E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;593E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;596E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;597E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;598E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;599E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;600E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;598E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;601E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;602E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;335E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;394E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;7;$aimageD;K;6;CP$UIDd;3;603E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;403E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;345E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;230E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;604E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;605E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;606E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;607E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;608E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;609E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;610E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;608E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;611E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;E;D;K;10;$classnameS;7;CPRadioK;8;$classesA;S;7;CPRadioS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;612E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;613E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;615E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;617E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;618E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;343E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;619E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;620E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;621E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;352E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;344E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;622E;E;D;K;10;$classnameS;18;CPSegmentedControlK;8;$classesA;S;18;CPSegmentedControlS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;624E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;528E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;626E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;627E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;628E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;532E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;629E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;630E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;631E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;538E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;632E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;633E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;624E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;634E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;635E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;636E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;628E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;637E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;638E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;185E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;639E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;631E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;625E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;640E;K;11;$aalignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;641E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;342E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;642E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;643E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;644E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;645E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;29E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;646E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;234E;K;14;$aborder-widthD;K;6;CP$UIDd;3;230E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;230E;K;16;$acontent-marginD;K;6;CP$UIDd;3;647E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;243E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;244E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;245E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;230E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPSearchFieldK;8;$classesA;S;13;CPSearchFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;195E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;648E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;649E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;650E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;651E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;236E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;346E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;3;195E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;653E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;654E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;650E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;655E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;236E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;346E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;3;195E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;28E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;656E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;657E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;28E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;650E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;658E;K;11;$aalignmentD;K;6;CP$UIDd;3;341E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;243E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;344E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;346E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;346E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;236E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;489E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;243E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;341E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;346E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;236E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;346E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;236E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;346E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;659E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;661E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;662E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;663E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;664E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;665E;E;D;K;6;$classD;K;6;CP$UIDd;3;200E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;660E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;666E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;26E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;668E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;669E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;670E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;671E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;672E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;667E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;673E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;27;{{335, -411}, {1137, 1049}}S;22;{{0, 0}, {1680, 1028}}d;1;7S;6;Windowd;1;0S;22;{{0, 1}, {1137, 1049}}S;22;{{0, 0}, {1137, 1049}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;E;E;S;6;normalS;6;{1, 1}F;S;20;{{0, 18}, {1137, 5}}S;19;{{0, 0}, {1137, 5}}d;2;34S;3;boxD;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;d;1;2d;1;3S;3;BoxS;20;{{0, 58}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;20;{{0, 99}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 139}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 177}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 215}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 255}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 296}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 331}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 372}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 403}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 438}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 530}, {1137, 5}}d;2;10D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 570}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 611}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 651}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 689}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 727}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 767}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 808}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 847}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 887}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 927}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{0, 969}, {1137, 5}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;20;{{18, 0}, {5, 1049}}S;19;{{0, 0}, {5, 1049}}d;2;20D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;20;{{93, 971}, {5, 88}}S;17;{{0, 0}, {5, 88}}d;2;12D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{329, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{438, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{247, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{266, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{359, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{476, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{386, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{625, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;d;2;17D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{485, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{724, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{749, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{854, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{882, 0}, {5, 1055}}S;19;{{0, 0}, {5, 1055}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;22;{{1111, 0}, {5, 1049}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;22;{{268, 298}, {94, 25}}S;18;{{0, 0}, {94, 25}}d;2;36S;6;buttonS;25;bordered+controlSizeSmallD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;676E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;d;1;4d;1;1S;5;SmallS;0;d;2;14T;S;22;{{388, 298}, {91, 25}}S;18;{{0, 0}, {91, 25}}S;24;bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;442E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;4;MiniS;22;{{20, 101}, {230, 25}}S;19;{{0, 0}, {230, 25}}S;36;bordered+controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;681E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;CPSmallSquareBezelStyleS;22;{{20, 141}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;21;CPRoundRectBezelStyleS;22;{{268, 141}, {94, 25}}S;34;bordered+controlSizeSmall+selectedD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;22;{{388, 141}, {91, 25}}S;33;bordered+controlSizeMini+selectedD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;21;{{20, 60}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;27;CPTexturedRoundedBezelStyleS;21;{{268, 60}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;21;{{388, 60}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;21;{{21, 20}, {228, 25}}S;19;{{0, 0}, {228, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;26;CPTexturedSquareBezelStyleS;21;{{268, 20}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;21;{{388, 20}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;22;{{20, 179}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;20;CPRecessedBezelStyleS;22;{{268, 179}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{388, 179}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;22;{{20, 217}, {230, 25}}S;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;28;CPShadowlessSquareBezelStyleS;22;{{20, 257}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;25;CPRegularSquareBezelStyleS;22;{{20, 810}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;19;CPRoundedBezelStyleS;22;{{20, 613}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 653}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{20, 572}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 532}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 691}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{20, 729}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{20, 769}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;23;{{884, 298}, {230, 25}}d;2;33S;36;bordered+controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 101}, {230, 25}}S;45;bordered+controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 141}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;22;{{884, 60}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{885, 20}, {228, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 179}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;23;{{884, 217}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 257}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;23;{{884, 810}, {230, 25}}d;1;9D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 613}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 653}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;23;{{884, 572}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 532}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 691}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;299E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;346E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;360E;E;S;23;{{884, 729}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;23;{{884, 769}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;683E;E;S;22;{{20, 440}, {230, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;681E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;6;Item 1S;17;_popUpItemAction:d;7;1048576S;6;Item 2S;6;Item 3S;23;{{884, 440}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{268, 440}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;23;{{751, 440}, {106, 25}}S;19;{{0, 0}, {106, 25}}S;34;bordered+controlSizeSmall+disabledD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;679E;E;S;22;{{388, 440}, {91, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;23;{{627, 440}, {100, 25}}S;19;{{0, 0}, {100, 25}}S;33;bordered+controlSizeMini+disabledD;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;680E;E;S;22;{{16, 330}, {238, 22}}S;19;{{0, 0}, {238, 22}}S;9;textfieldS;35;bezeled+controlSizeRegular+editableS;6;TargetD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;684E;E;S;23;{{880, 330}, {238, 22}}S;56;bezeled+controlSizeRegular+disabled+editable+placeholderS;23;{{265, 330}, {101, 26}}S;19;{{0, 0}, {101, 26}}S;45;bezeled+controlSizeSmall+editable+placeholderS;23;{{748, 330}, {113, 26}}S;19;{{0, 0}, {113, 26}}S;54;bezeled+controlSizeSmall+disabled+editable+placeholderS;22;{{384, 330}, {99, 23}}S;18;{{0, 0}, {99, 23}}S;44;bezeled+controlSizeMini+editable+placeholderS;23;{{623, 330}, {108, 23}}S;19;{{0, 0}, {108, 23}}S;53;bezeled+controlSizeMini+disabled+editable+placeholderS;22;{{16, 846}, {238, 26}}S;19;{{0, 0}, {238, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;d;1;5S;23;{{264, 846}, {102, 22}}S;19;{{0, 0}, {102, 22}}S;61;bezeled+button-bordered+controlSizeSmall+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;23;{{747, 846}, {114, 22}}S;19;{{0, 0}, {114, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;22;{{384, 846}, {99, 19}}S;18;{{0, 0}, {99, 19}}S;60;bezeled+button-bordered+controlSizeMini+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;23;{{623, 846}, {108, 19}}S;19;{{0, 0}, {108, 19}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;23;{{880, 846}, {238, 26}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;D;K;6;CP$UIDd;3;685E;E;E;S;22;{{20, 889}, {230, 17}}S;19;{{0, 0}, {230, 17}}S;18;controlSizeRegularS;5;LabelS;22;{{268, 889}, {94, 14}}S;18;{{0, 0}, {94, 14}}S;16;controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;686E;E;S;23;{{751, 889}, {106, 14}}S;19;{{0, 0}, {106, 14}}S;22;{{388, 889}, {91, 11}}S;18;{{0, 0}, {91, 11}}S;15;controlSizeMiniS;23;{{627, 889}, {100, 11}}S;19;{{0, 0}, {100, 11}}S;23;{{884, 889}, {230, 17}}S;22;{{20, 926}, {230, 29}}S;19;{{0, 0}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;687E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;22;{{268, 926}, {93, 29}}S;18;{{0, 0}, {93, 29}}S;33;bezeled+bordered+controlSizeSmallD;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;23;{{751, 925}, {105, 29}}S;19;{{0, 0}, {105, 29}}D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;22;{{388, 926}, {91, 29}}S;18;{{0, 0}, {91, 29}}S;32;bezeled+bordered+controlSizeMiniD;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;23;{{627, 926}, {100, 29}}S;19;{{0, 0}, {100, 29}}D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;23;{{884, 926}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;688E;E;D;K;6;$classD;K;6;CP$UIDd;3;547E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;689E;E;S;19;{{20, 374}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperd;5;65540d;3;100S;20;{{269, 374}, {0, 0}}S;20;{{389, 375}, {0, 0}}S;21;{{17, 402}, {71, 21}}S;18;{{0, 0}, {71, 21}}S;9;check-boxS;27;controlSizeRegular+selectedS;5;CheckS;22;{{880, 402}, {71, 21}}S;36;controlSizeRegular+disabled+selectedS;22;{{266, 402}, {62, 21}}S;18;{{0, 0}, {62, 21}}S;25;controlSizeSmall+selectedS;22;{{749, 402}, {62, 21}}S;34;controlSizeSmall+disabled+selectedS;22;{{386, 400}, {97, 22}}S;18;{{0, 0}, {97, 22}}S;24;controlSizeMini+selectedS;22;{{625, 400}, {97, 22}}S;33;controlSizeMini+disabled+selectedS;22;{{20, 298}, {230, 25}}D;K;6;$classD;K;6;CP$UIDd;3;339E;K;4;nameD;K;6;CP$UIDd;3;677E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;678E;K;5;valueD;K;6;CP$UIDd;3;682E;E;S;22;{{268, 613}, {94, 40}}S;18;{{0, 0}, {94, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;690E;D;K;6;CP$UIDd;3;691E;E;E;S;22;{{388, 613}, {91, 40}}S;18;{{0, 0}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;692E;D;K;6;CP$UIDd;3;693E;E;E;S;22;{{388, 653}, {91, 40}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;694E;D;K;6;CP$UIDd;3;695E;E;E;S;22;{{267, 529}, {97, 23}}S;18;{{0, 0}, {97, 23}}S;5;radioS;7;RegularD;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;696E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{386, 527}, {94, 25}}D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;697E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;22;{{386, 565}, {96, 29}}S;18;{{0, 0}, {96, 29}}D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;698E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;1;0E;E;S;21;{{21, 971}, {-3, 25}}S;18;{{0, 0}, {-3, 25}}S;17;segmented-controlD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;700E;D;K;6;CP$UIDd;3;701E;E;E;S;22;{{268, 971}, {-4, 20}}S;18;{{0, 0}, {-4, 20}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;702E;D;K;6;CP$UIDd;3;703E;E;E;S;22;{{388, 971}, {-1, 15}}S;18;{{0, 0}, {-1, 15}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;704E;D;K;6;CP$UIDd;3;705E;E;E;S;22;{{884, 971}, {-3, 25}}S;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;706E;D;K;6;CP$UIDd;3;707E;E;E;S;22;{{751, 971}, {-4, 20}}S;25;controlSizeSmall+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;708E;D;K;6;CP$UIDd;3;709E;E;E;S;22;{{627, 971}, {-1, 15}}S;24;controlSizeMini+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;710E;D;K;6;CP$UIDd;3;711E;E;E;S;21;{{677, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{812, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;21;{{957, 971}, {5, 88}}D;K;6;$classD;K;6;CP$UIDd;3;241E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;674E;E;S;23;{{483, 215}, {149, 28}}S;19;{{0, 0}, {149, 28}}S;11;searchfieldS;53;bezeled+controlSizeSmall+editable+placeholder+roundedd;3;254S;23;{{483, 255}, {149, 19}}S;19;{{0, 0}, {149, 19}}S;52;bezeled+controlSizeMini+editable+placeholder+roundedS;23;{{483, 176}, {149, 32}}S;19;{{0, 0}, {149, 32}}S;55;bezeled+controlSizeRegular+editable+placeholder+roundedS;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;E;E;S;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;712E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;713E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;714E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;715E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;716E;E;D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;717E;E;S;22;{"width":0,"height":0}S;29;.Helvetica Neue DeskInterfaced;2;11S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;676E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;442E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;d;2;13D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;681E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;3;337E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;675E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;269E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;236E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;E;E;S;4;ItemD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;718E;D;K;6;CP$UIDd;3;718E;D;K;6;CP$UIDd;3;718E;D;K;6;CP$UIDd;3;342E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;D;K;6;CP$UIDd;3;342E;E;E;d;15;-62135510400000d;14;64092297600000D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;342E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;719E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;719E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;722E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;178E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;719E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;178E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;728E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;356E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;230E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;179E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;342E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;729E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;179E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;730E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;731E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;179E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;732E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;179E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;733E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;338E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;342E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;731E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;180E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;342E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;734E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;734E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;180E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;735E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;342E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;180E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;230E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;737E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;734E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;180E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;720E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;721E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;614E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;738E;K;11;$aalignmentD;K;6;CP$UIDd;3;230E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;230E;K;6;$afontD;K;6;CP$UIDd;3;350E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;243E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;235E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;236E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;230E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;341E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;243E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;723E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;236E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;342E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;342E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;346E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;243E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;230E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;724E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;725E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;736E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;236E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;739E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;236E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;236E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;230E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;3;699E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;740E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;346E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;346E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;342E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;741E;D;K;6;CP$UIDd;3;742E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;744E;E;E;f;18;0.6862745098039216S;18;{{0, 0}, {58, 18}}d;2;18D;K;6;$classD;K;6;CP$UIDd;3;488E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;745E;E;S;46;bordered+controlSizeRegular+roundRect+selectedS;5;Radiof;3;0.5f;4;0.05D;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;746E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;690E;E;S;19;{{0, 20}, {58, 18}}S;37;bordered+controlSizeRegular+roundRectS;18;{{0, 0}, {53, 18}}S;44;bordered+controlSizeSmall+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;747E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;692E;E;S;19;{{0, 20}, {53, 18}}S;35;bordered+controlSizeSmall+roundRectS;18;{{0, 0}, {48, 18}}S;43;bordered+controlSizeMini+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;616E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;748E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;694E;E;S;19;{{0, 20}, {48, 18}}S;34;bordered+controlSizeMini+roundRectS;1;TS;4;Testf;12;0.1843137294f;12;0.6745098233f;12;0.3843137622f;4;0.71D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;230E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;690E;D;K;6;CP$UIDd;3;691E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;692E;D;K;6;CP$UIDd;3;693E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;694E;D;K;6;CP$UIDd;3;695E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index 000a05aa8..67bb7e06c 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -6,6 +6,11 @@ function cleanup() { if (FILE.isDirectory(dir)) FILE.rmtree(dir); }); + + ["objj2objcskeletonTestFile.h", "objj2objcskeletonTestFile.m", "objj2objcskeletonTestFile.j", "objjWarningTestFile.j", "objjErrorTestFile.j"].forEach(function(file) { + if (FILE.isFile(file)) + FILE.remove(file); + }); } @implementation ToolsTest : OJTestCase @@ -13,13 +18,22 @@ function cleanup() { } - (void)setUp +{ + cleanup(); + FILE.write("objj2objcskeletonTestFile.j", "@import \n@import \n\n\n@implementation AppController : CPObject\n{\n @outlet CPSplitView splitViewA;\n @outlet CPSplitView splitViewB;\n @outlet CPSplitView splitViewC;\n}\n\n@end"); + FILE.write("objjWarningTestFile.j", "@import @implementation AppController : CPObject{CPWindow theWindow;}@end"); + FILE.write("objjErrorTestFile.j", "@implementation AppController : CPObject{}@end"); +} + +- (void)tearDown { cleanup(); } - (void)testTools { - var status; + var status, + rootDirectory = FILE.cwd(); status = OS.system(["capp", "gen", "ToolsTestApp"].map(OS.enquote).join(" ") + " > /dev/null"); [self assert:0 equals:status message:"capp gen failed"]; @@ -33,16 +47,40 @@ function cleanup() { status = OS.system(["objj", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed"]; + status = OS.system(["objj", "-x", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed"]; + + var p = OS.popen(["objj", "--xml", "objjErrorTestFile.j"]); + [self assert:1 equals:p.wait() message:"objj failed"]; + [self assert:"\nline1sourcePath" + rootDirectory + "/objjErrorTestFile.jmessage\ +\n@implementation AppController : CPObject{}@end\ +\n ^\ +\nERROR line 1 in file:" + rootDirectory + "/objjErrorTestFile.j: Can't find superclass CPObject\n" equals:p.stdout.read() message:"objj failed"]; + + var p = OS.popen(["objj", "-x", "objjWarningTestFile.j"]); + [self assert:0 equals:p.wait() message:"objj failed"]; + [self assert:"\nline1sourcePath" + rootDirectory + "/objjWarningTestFile.jmessage\n@import <Foundation/Foundation.j>@implementation AppController : CPObject{CPWindow theWindow;}@end\ +\n ^\ +\nWARNING line 1 in file:" + rootDirectory + "/objjWarningTestFile.j: Unknown type 'CPWindow' for ivar 'theWindow'\n" equals:p.stdout.read() message:"objj failed"]; + status = OS.system(["objj", "-m", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed with several files"]; status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed with options -I"]; -} -- (void)tearDown -{ - cleanup(); + status = OS.system(["objj2objcskeleton", "objj2objcskeletonTestFile.j", "."]); + [self assert:0 equals:status message:"objj2objcskeleton failed"]; + + var contentHeader = FILE.read("objj2objcskeletonTestFile.h"), + expectedHeaderResult = "#import \n#import \"xcc_general_include.h\"\n\n@interface AppController : NSObject\n\n@property (assign) IBOutlet NSSplitView* splitViewA;\n@property (assign) IBOutlet NSSplitView* splitViewB;\n@property (assign) IBOutlet NSSplitView* splitViewC;\n\n@end\n"; + + [self assert:contentHeader equals:expectedHeaderResult message:@"Header generated by objj2objcskeleton is wrong"]; + + var contentMFile = FILE.read("objj2objcskeletonTestFile.m"), + expectedMResult = "#import \"objj2objcskeletonTestFile.h\"\n\n@implementation AppController\n@end\n"; + + [self assert:contentMFile equals:expectedMResult message:@"File generated by objj2objcskeleton is wrong"]; } @end diff --git a/Tools/Documentation/Cappuccino.doxygen b/Tools/Documentation/Cappuccino.doxygen index c2abad4e4..2d57fcd49 100644 --- a/Tools/Documentation/Cappuccino.doxygen +++ b/Tools/Documentation/Cappuccino.doxygen @@ -38,7 +38,7 @@ PROJECT_NAME = " API" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.9.7-1 +PROJECT_NUMBER = 0.9.8 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Tools/Jakefile b/Tools/Jakefile index b0f0b52a8..440bf3713 100644 --- a/Tools/Jakefile +++ b/Tools/Jakefile @@ -2,6 +2,6 @@ require("../common.jake"); // nib2cib uses fontinfo and imagesize and capp uses nib2cib -subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "capp_lint", "dump_theme", "XcodeCapp"], ["build", /*"clean", "clobber"*/]); +subtasks(["fontinfo", "imagesize", "nib2cib", "objj2objcskeleton", "capp", "capp_lint", "capp_env", "dump_theme", "XcodeCapp"], ["build", /*"clean", "clobber"*/]); subtasks(["fontinfo", "imagesize"], ["clean", "clobber"]); diff --git a/Tools/XcodeCapp/Jakefile b/Tools/XcodeCapp/Jakefile index 764cce92f..3ae57348a 100644 --- a/Tools/XcodeCapp/Jakefile +++ b/Tools/XcodeCapp/Jakefile @@ -13,22 +13,34 @@ task ("build", function() OS.exit(0); // No building on 10.6 - var p = OS.popen(["sw_vers", "-productVersion"]); - - if (p.wait() === 0) + try { - var versions = p.stdout.read().split("."), - majorVersion = parseInt(versions[0], 10), - minorVersion = parseInt(versions[1], 10), - buildVersion = parseInt(versions[2], 10); + var p = OS.popen(["sw_vers", "-productVersion"]); - if (majorVersion < 10 || minorVersion < 7) + if (p.wait() === 0) { - colorPrint("XcodeCapp can only be built on Mac OS X 10.7+. You can download the binary here: https://www.dropbox.com/sh/gxdgm356gyb9tqc/rFNyl8hcVG", "red"); + var versions = p.stdout.read().split("."), + majorVersion = parseInt(versions[0], 10), + minorVersion = parseInt(versions[1], 10), + buildVersion = parseInt(versions[2], 10); - OS.exit(0); + if (majorVersion < 10 || minorVersion < 7) + { + colorPrint("XcodeCapp can only be built on Mac OS X 10.7+. You can download the binary here: https://www.dropbox.com/sh/gxdgm356gyb9tqc/rFNyl8hcVG", "red"); + + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); + OS.exit(0); + } } } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); + } if (executableExists("xcodebuild")) { @@ -40,18 +52,7 @@ task ("build", function() FILE.remove(installPath); if (OS.system("xcodebuild " + args)) - OS.exit(1); - - if (!executableExists("xcc")) - { - print("\nWould you like to install the xcc command line tool in /usr/local/bin? yes or no:"); - - if (system.stdin.readLine() == "yes\n") - { - sudo(["mkdir", "-p", "/usr/local/bin"]); - sudo(["ln", "-s", "/Applications/XcodeCapp.app/Contents/MacOS/xcc", "/usr/local/bin/"]); - } - } + colorPrint("Unable to build XcodeCapp. Skipping", "orange"); } else { @@ -62,13 +63,13 @@ task ("build", function() task ("clean", function() { if (OS.system("xcodebuild clean")) - OS.exit(1); + colorPrint("Unable to clean XcodeCapp. Skipping", "orange"); }); task ("clobber", function() { if (OS.system("xcodebuild clean")) - OS.exit(1); + colorPrint("Unable to clean XcodeCapp. Skipping", "orange"); }); task ("default", ["build"]); diff --git a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj index 3449e0637..2783085e1 100644 --- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj +++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj @@ -7,631 +7,589 @@ objects = { /* Begin PBXBuildFile section */ - 68A43034191BF044008A68A7 /* help.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 68A43033191BF044008A68A7 /* help.pdf */; }; - E10E4CD717298E5F004AB09E /* project.pbxproj in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2A172188F300263CE3 /* project.pbxproj */; }; - E14015421740248C006C2792 /* XcodeProjectCloser.m in Sources */ = {isa = PBXBuildFile; fileRef = E14015411740248C006C2792 /* XcodeProjectCloser.m */; }; - E1401543174025B8006C2792 /* XcodeProjectCloser.m in Sources */ = {isa = PBXBuildFile; fileRef = E14015411740248C006C2792 /* XcodeProjectCloser.m */; }; - E164FDD31720E77100263CE3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FDD21720E77100263CE3 /* Cocoa.framework */; }; - E164FDDF1720E77100263CE3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E164FDDE1720E77100263CE3 /* main.m */; }; - E164FDF51720EBC100263CE3 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = E164FDF41720EBC100263CE3 /* AppController.m */; }; - E164FDF71720EBD600263CE3 /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FDF61720EBD600263CE3 /* Growl.framework */; }; - E164FDFF1720EC5B00263CE3 /* XcodeCapp.m in Sources */ = {isa = PBXBuildFile; fileRef = E164FDFB1720EC5B00263CE3 /* XcodeCapp.m */; }; - E164FE181720F44B00263CE3 /* parser.j in Resources */ = {isa = PBXBuildFile; fileRef = E164FE171720F44B00263CE3 /* parser.j */; }; - E164FE1A1720F49A00263CE3 /* Growl Registration Ticket.growlRegDict in Resources */ = {isa = PBXBuildFile; fileRef = E164FE191720F49A00263CE3 /* Growl Registration Ticket.growlRegDict */; }; - E164FE1F1720F51E00263CE3 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FE1D1720F50100263CE3 /* CoreServices.framework */; }; - E164FE211720F55600263CE3 /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FDF61720EBD600263CE3 /* Growl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - E164FE2F1721A34900263CE3 /* icon-active.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2C1721A34900263CE3 /* icon-active.png */; }; - E164FE301721A34900263CE3 /* icon-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2D1721A34900263CE3 /* icon-inactive.png */; }; - E164FE311721A34900263CE3 /* icon-working.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2E1721A34900263CE3 /* icon-working.png */; }; - E170C3FB17296205003DC489 /* pbxprojModifier.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FE141720F40400263CE3 /* pbxprojModifier.py */; }; - E170C3FC1729620C003DC489 /* mod_pbxproj.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FE131720F40400263CE3 /* mod_pbxproj.py */; }; - E170C3FD1729620F003DC489 /* parser.j in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FE171720F44B00263CE3 /* parser.j */; }; - E170C40317298833003DC489 /* icon-active@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E170C3FE17298833003DC489 /* icon-active@2x.png */; }; - E170C40417298833003DC489 /* icon-error.png in Resources */ = {isa = PBXBuildFile; fileRef = E170C3FF17298833003DC489 /* icon-error.png */; }; - E170C40517298833003DC489 /* icon-error@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E170C40017298833003DC489 /* icon-error@2x.png */; }; - E170C40617298833003DC489 /* icon-inactive@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E170C40117298833003DC489 /* icon-inactive@2x.png */; }; - E170C40717298833003DC489 /* icon-working@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E170C40217298833003DC489 /* icon-working@2x.png */; }; - E171D25F173C168C00210893 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E171D25E173C168C00210893 /* Foundation.framework */; }; - E171D262173C168C00210893 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E171D261173C168C00210893 /* main.m */; }; - E171D26A173C1ADD00210893 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FE1D1720F50100263CE3 /* CoreServices.framework */; }; - E171D26C173C1C8300210893 /* xcc in CopyFiles */ = {isa = PBXBuildFile; fileRef = E171D25D173C168C00210893 /* xcc */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - E17A822D172700B90095CD83 /* XcodeCapp.iconset in Resources */ = {isa = PBXBuildFile; fileRef = E17A822C172700B90095CD83 /* XcodeCapp.iconset */; }; - E17B55411732F57700809FFB /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17B55401732F57700809FFB /* Quartz.framework */; }; - E1A5594A172C5EE20088FB61 /* FindSourceFilesOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A55949172C5EE20088FB61 /* FindSourceFilesOperation.m */; }; - E1A5594D172CA8D40088FB61 /* ProcessSourceOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A5594C172CA8D40088FB61 /* ProcessSourceOperation.m */; }; - E1E90C411735D846005C6D5B /* DDLogLevel.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E90C391735D846005C6D5B /* DDLogLevel.m */; }; - E1E90C421735D846005C6D5B /* Notifications.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E90C3C1735D846005C6D5B /* Notifications.m */; }; - E1E90C431735D846005C6D5B /* UserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E90C3F1735D846005C6D5B /* UserDefaults.m */; }; - E1E90C4B1735D8A1005C6D5B /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E90C461735D8A1005C6D5B /* DDASLLogger.m */; }; - E1E90C4C1735D8A1005C6D5B /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E90C481735D8A1005C6D5B /* DDLog.m */; }; - E1E90C4D1735D8A1005C6D5B /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E90C4A1735D8A1005C6D5B /* DDTTYLogger.m */; }; - E1E90C62173B42D0005C6D5B /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E1E90C60173B42D0005C6D5B /* MainMenu.xib */; }; - E1E90C67173B44CC005C6D5B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E1E90C65173B44CC005C6D5B /* InfoPlist.strings */; }; - E1ED6B71173414E100641628 /* icon_128x128.png in Resources */ = {isa = PBXBuildFile; fileRef = E1ED6B6F173414E100641628 /* icon_128x128.png */; }; - E1ED6B72173414E100641628 /* icon_128x128@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E1ED6B70173414E100641628 /* icon_128x128@2x.png */; }; + 021B94651B20CECA00F12DDA /* XCCOperationsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 021B94641B20CECA00F12DDA /* XCCOperationsViewController.m */; }; + 021B94671B20D1F800F12DDA /* OperationsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 021B94661B20D1F800F12DDA /* OperationsView.xib */; }; + 021B94691B20D6FC00F12DDA /* ErrorsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 021B94681B20D6FC00F12DDA /* ErrorsView.xib */; }; + 021B946C1B20D71200F12DDA /* XCCErrorsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 021B946B1B20D71200F12DDA /* XCCErrorsViewController.m */; }; + 021B94701B20E31F00F12DDA /* XCCSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 021B946E1B20E31F00F12DDA /* XCCSettingsViewController.m */; }; + 021B94711B20E31F00F12DDA /* SettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 021B946F1B20E31F00F12DDA /* SettingsView.xib */; }; + 021B94751B21112500F12DDA /* XCCWelcomeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 021B94741B21112500F12DDA /* XCCWelcomeView.m */; }; + 0255B8401B1F71FB000CA4BC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0255B83F1B1F71FB000CA4BC /* AppDelegate.m */; }; + 0257A65B1B3A2B0000015C1F /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6841F2471AF98CE600CFE60E /* MainMenu.xib */; }; + 0258003C1B1E1C470000EB7D /* NSMutableArray+moveIndexes.m in Sources */ = {isa = PBXBuildFile; fileRef = 0258003B1B1E1C470000EB7D /* NSMutableArray+moveIndexes.m */; }; + 025800451B1E3F010000EB7D /* XCCAbstractOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 025800441B1E3F010000EB7D /* XCCAbstractOperation.m */; }; + 0258004B1B1E67090000EB7D /* supawhich in Resources */ = {isa = PBXBuildFile; fileRef = 0258004A1B1E67090000EB7D /* supawhich */; }; + 027539111B227D7500F6D824 /* YRKSpinningProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 027539101B227D7500F6D824 /* YRKSpinningProgressIndicator.m */; }; + 680621191B015BF400CB24CD /* XCCCappuccinoProjectControllerDataView.m in Sources */ = {isa = PBXBuildFile; fileRef = 680621181B015BF400CB24CD /* XCCCappuccinoProjectControllerDataView.m */; }; + 6815BBEB1AFC24430030D8BB /* XcodeProjectCloser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6815BBEA1AFC24430030D8BB /* XcodeProjectCloser.m */; }; + 681ADE8F1B0D032C00FC8E08 /* XCCPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 681ADE8E1B0D032C00FC8E08 /* XCCPath.m */; }; + 6824CDDA1B0D5AA700F73447 /* XCCOperationDataView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6824CDD91B0D5AA700F73447 /* XCCOperationDataView.m */; }; + 6824CDDE1B0DA34500F73447 /* XCCMainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6824CDDD1B0DA34500F73447 /* XCCMainController.m */; }; + 6824CDEA1B0E9CDB00F73447 /* XCCOperationErrorDataView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6824CDE91B0E9CDB00F73447 /* XCCOperationErrorDataView.m */; }; + 6824CDF01B0E9F1400F73447 /* XCCOperationError.m in Sources */ = {isa = PBXBuildFile; fileRef = 6824CDEF1B0E9F1400F73447 /* XCCOperationError.m */; }; + 6841F2441AF98CE600CFE60E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2431AF98CE600CFE60E /* main.m */; }; + 6841F2461AF98CE600CFE60E /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6841F2451AF98CE600CFE60E /* Images.xcassets */; }; + 6841F2651AF98DCB00CFE60E /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2601AF98DCB00CFE60E /* DDASLLogger.m */; }; + 6841F2661AF98DCB00CFE60E /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2621AF98DCB00CFE60E /* DDLog.m */; }; + 6841F2671AF98DCB00CFE60E /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2641AF98DCB00CFE60E /* DDTTYLogger.m */; }; + 6841F26C1AF98DDD00CFE60E /* mod_pbxproj.py in Resources */ = {isa = PBXBuildFile; fileRef = 6841F2691AF98DDD00CFE60E /* mod_pbxproj.py */; }; + 6841F26E1AF98DDD00CFE60E /* pbxprojModifier.py in Resources */ = {isa = PBXBuildFile; fileRef = 6841F26B1AF98DDD00CFE60E /* pbxprojModifier.py */; }; + 6841F2781AF98FA300CFE60E /* DDLogLevel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2771AF98FA300CFE60E /* DDLogLevel.m */; }; + 6841F27C1AF990C300CFE60E /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 6841F27A1AF990C300CFE60E /* Debug.xcconfig */; }; + 6841F27D1AF990C300CFE60E /* Release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 6841F27B1AF990C300CFE60E /* Release.xcconfig */; }; + 6841F2A51AF9932300CFE60E /* project.pbxproj in Resources */ = {isa = PBXBuildFile; fileRef = 6841F28A1AF9932300CFE60E /* project.pbxproj */; }; + 6841F2B71AFA83D500CFE60E /* XCCUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2B61AFA83D500CFE60E /* XCCUserDefaults.m */; }; + 6841F2BF1AFA965300CFE60E /* XCCTaskLauncher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2BE1AFA965300CFE60E /* XCCTaskLauncher.m */; }; + 6841F2C41AFABD7200CFE60E /* XCCCappuccinoProject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2C31AFABD7200CFE60E /* XCCCappuccinoProject.m */; }; + 6841F2CA1AFADEBC00CFE60E /* XCCSourcesFinderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2C71AFADEBC00CFE60E /* XCCSourcesFinderOperation.m */; }; + 6841F2CB1AFADEBC00CFE60E /* XCCSourceProcessingOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2C91AFADEBC00CFE60E /* XCCSourceProcessingOperation.m */; }; + 6863FBA31AFD55A900040C8E /* XCCFSEventLogUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 6863FBA21AFD55A900040C8E /* XCCFSEventLogUtils.m */; }; + 686ACD311B16397F0089EB03 /* XCCCappuccinoProjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 686ACD301B16397F0089EB03 /* XCCCappuccinoProjectController.m */; }; + 686C69711B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.m in Sources */ = {isa = PBXBuildFile; fileRef = 686C69701B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.m */; }; + 68B6BF321B1E2546003B265B /* XCCPPXOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 68B6BF311B1E2546003B265B /* XCCPPXOperation.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - E171D26D173C405C00210893 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = E164FDC71720E77100263CE3 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E171D25C173C168C00210893; - remoteInfo = xcc; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - E164FE201720F54800263CE3 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - E164FE211720F55600263CE3 /* Growl.framework in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E170C3F9172961E6003DC489 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 12; - files = ( - E170C3FB17296205003DC489 /* pbxprojModifier.py in CopyFiles */, - E170C3FC1729620C003DC489 /* mod_pbxproj.py in CopyFiles */, - E170C3FD1729620F003DC489 /* parser.j in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E171D25B173C168C00210893 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; - E171D26B173C1C6900210893 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 6; - files = ( - E171D26C173C1C8300210893 /* xcc in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ - 68A43033191BF044008A68A7 /* help.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = help.pdf; path = Resources/help.pdf; sourceTree = ""; }; - E14015401740248C006C2792 /* XcodeProjectCloser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XcodeProjectCloser.h; sourceTree = ""; }; - E14015411740248C006C2792 /* XcodeProjectCloser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XcodeProjectCloser.m; sourceTree = ""; }; - E164FDCF1720E77100263CE3 /* XcodeCapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XcodeCapp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - E164FDD21720E77100263CE3 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - E164FDD51720E77100263CE3 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - E164FDD61720E77100263CE3 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - E164FDD71720E77100263CE3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - E164FDDE1720E77100263CE3 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - E164FDE01720E77100263CE3 /* XcodeCapp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XcodeCapp-Prefix.pch"; sourceTree = ""; }; - E164FDEF1720E7FA00263CE3 /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E164FDF01720E7FA00263CE3 /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - E164FDF41720EBC100263CE3 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AppController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - E164FDF61720EBD600263CE3 /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Growl.framework; path = XcodeCapp/Growl.framework; sourceTree = SOURCE_ROOT; }; - E164FDFB1720EC5B00263CE3 /* XcodeCapp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = XcodeCapp.m; sourceTree = ""; usesTabs = 0; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - E164FE131720F40400263CE3 /* mod_pbxproj.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = mod_pbxproj.py; sourceTree = ""; }; - E164FE141720F40400263CE3 /* pbxprojModifier.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = pbxprojModifier.py; sourceTree = ""; }; - E164FE171720F44B00263CE3 /* parser.j */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = parser.j; sourceTree = ""; }; - E164FE191720F49A00263CE3 /* Growl Registration Ticket.growlRegDict */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Growl Registration Ticket.growlRegDict"; sourceTree = ""; }; - E164FE1D1720F50100263CE3 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; - E164FE2A172188F300263CE3 /* project.pbxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.pbxproject; lineEnding = 0; name = project.pbxproj; path = Resources/project.pbxproj; sourceTree = ""; }; - E164FE2C1721A34900263CE3 /* icon-active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-active.png"; path = "Resources/icon-active.png"; sourceTree = ""; }; - E164FE2D1721A34900263CE3 /* icon-inactive.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-inactive.png"; path = "Resources/icon-inactive.png"; sourceTree = ""; }; - E164FE2E1721A34900263CE3 /* icon-working.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-working.png"; path = "Resources/icon-working.png"; sourceTree = ""; }; - E170C3FE17298833003DC489 /* icon-active@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-active@2x.png"; path = "Resources/icon-active@2x.png"; sourceTree = ""; }; - E170C3FF17298833003DC489 /* icon-error.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-error.png"; path = "Resources/icon-error.png"; sourceTree = ""; }; - E170C40017298833003DC489 /* icon-error@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-error@2x.png"; path = "Resources/icon-error@2x.png"; sourceTree = ""; }; - E170C40117298833003DC489 /* icon-inactive@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-inactive@2x.png"; path = "Resources/icon-inactive@2x.png"; sourceTree = ""; }; - E170C40217298833003DC489 /* icon-working@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-working@2x.png"; path = "Resources/icon-working@2x.png"; sourceTree = ""; }; - E171D25D173C168C00210893 /* xcc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xcc; sourceTree = BUILT_PRODUCTS_DIR; }; - E171D25E173C168C00210893 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - E171D261173C168C00210893 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - E171D264173C168C00210893 /* xcc-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "xcc-Prefix.pch"; sourceTree = ""; }; - E17A822C172700B90095CD83 /* XcodeCapp.iconset */ = {isa = PBXFileReference; lastKnownFileType = folder.iconset; name = XcodeCapp.iconset; path = Resources/XcodeCapp.iconset; sourceTree = ""; }; - E17B55401732F57700809FFB /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; - E1A55949172C5EE20088FB61 /* FindSourceFilesOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = FindSourceFilesOperation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - E1A5594C172CA8D40088FB61 /* ProcessSourceOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ProcessSourceOperation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - E1E90C371735D82B005C6D5B /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; - E1E90C381735D846005C6D5B /* DDLogLevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLogLevel.h; sourceTree = ""; }; - E1E90C391735D846005C6D5B /* DDLogLevel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLogLevel.m; sourceTree = ""; }; - E1E90C3A1735D846005C6D5B /* FindSourceFilesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindSourceFilesOperation.h; sourceTree = ""; }; - E1E90C3B1735D846005C6D5B /* Notifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Notifications.h; sourceTree = ""; }; - E1E90C3C1735D846005C6D5B /* Notifications.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Notifications.m; sourceTree = ""; }; - E1E90C3D1735D846005C6D5B /* ProcessSourceOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProcessSourceOperation.h; sourceTree = ""; }; - E1E90C3E1735D846005C6D5B /* UserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserDefaults.h; sourceTree = ""; }; - E1E90C3F1735D846005C6D5B /* UserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserDefaults.m; sourceTree = ""; }; - E1E90C401735D846005C6D5B /* XcodeCapp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XcodeCapp.h; sourceTree = ""; }; - E1E90C451735D8A1005C6D5B /* DDASLLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDASLLogger.h; sourceTree = ""; }; - E1E90C461735D8A1005C6D5B /* DDASLLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDASLLogger.m; sourceTree = ""; }; - E1E90C471735D8A1005C6D5B /* DDLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLog.h; sourceTree = ""; }; - E1E90C481735D8A1005C6D5B /* DDLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLog.m; sourceTree = ""; }; - E1E90C491735D8A1005C6D5B /* DDTTYLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTTYLogger.h; sourceTree = ""; }; - E1E90C4A1735D8A1005C6D5B /* DDTTYLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTTYLogger.m; sourceTree = ""; }; - E1E90C61173B42D0005C6D5B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; - E1E90C66173B44CC005C6D5B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - E1E90C68173B48DA005C6D5B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E1ED6B6F173414E100641628 /* icon_128x128.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_128x128.png; path = Resources/icon_128x128.png; sourceTree = ""; }; - E1ED6B70173414E100641628 /* icon_128x128@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon_128x128@2x.png"; path = "Resources/icon_128x128@2x.png"; sourceTree = ""; }; + 021B94631B20CECA00F12DDA /* XCCOperationsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCOperationsViewController.h; sourceTree = ""; }; + 021B94641B20CECA00F12DDA /* XCCOperationsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCOperationsViewController.m; sourceTree = ""; }; + 021B94661B20D1F800F12DDA /* OperationsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OperationsView.xib; sourceTree = ""; }; + 021B94681B20D6FC00F12DDA /* ErrorsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ErrorsView.xib; sourceTree = ""; }; + 021B946A1B20D71200F12DDA /* XCCErrorsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCErrorsViewController.h; sourceTree = ""; }; + 021B946B1B20D71200F12DDA /* XCCErrorsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCErrorsViewController.m; sourceTree = ""; }; + 021B946D1B20E31F00F12DDA /* XCCSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCSettingsViewController.h; sourceTree = ""; }; + 021B946E1B20E31F00F12DDA /* XCCSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCSettingsViewController.m; sourceTree = ""; }; + 021B946F1B20E31F00F12DDA /* SettingsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsView.xib; sourceTree = ""; }; + 021B94731B21112500F12DDA /* XCCWelcomeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCWelcomeView.h; sourceTree = ""; }; + 021B94741B21112500F12DDA /* XCCWelcomeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCWelcomeView.m; sourceTree = ""; }; + 0255B83F1B1F71FB000CA4BC /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 0258003A1B1E1C470000EB7D /* NSMutableArray+moveIndexes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray+moveIndexes.h"; sourceTree = ""; }; + 0258003B1B1E1C470000EB7D /* NSMutableArray+moveIndexes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableArray+moveIndexes.m"; sourceTree = ""; }; + 025800431B1E3F010000EB7D /* XCCAbstractOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCAbstractOperation.h; sourceTree = ""; }; + 025800441B1E3F010000EB7D /* XCCAbstractOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCAbstractOperation.m; sourceTree = ""; }; + 0258004A1B1E67090000EB7D /* supawhich */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = supawhich; sourceTree = ""; }; + 0275390F1B227D7500F6D824 /* YRKSpinningProgressIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YRKSpinningProgressIndicator.h; sourceTree = ""; }; + 027539101B227D7500F6D824 /* YRKSpinningProgressIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YRKSpinningProgressIndicator.m; sourceTree = ""; }; + 680621171B015BF400CB24CD /* XCCCappuccinoProjectControllerDataView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCCappuccinoProjectControllerDataView.h; sourceTree = ""; }; + 680621181B015BF400CB24CD /* XCCCappuccinoProjectControllerDataView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCCappuccinoProjectControllerDataView.m; sourceTree = ""; }; + 6815BBE61AFBE6B00030D8BB /* XCCCappuccinoProjectController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCCappuccinoProjectController.h; sourceTree = ""; }; + 6815BBE91AFC24430030D8BB /* XcodeProjectCloser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XcodeProjectCloser.h; sourceTree = ""; }; + 6815BBEA1AFC24430030D8BB /* XcodeProjectCloser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XcodeProjectCloser.m; sourceTree = ""; }; + 681ADE8D1B0D032C00FC8E08 /* XCCPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCPath.h; sourceTree = ""; }; + 681ADE8E1B0D032C00FC8E08 /* XCCPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCPath.m; sourceTree = ""; }; + 6824CDD81B0D5AA700F73447 /* XCCOperationDataView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCOperationDataView.h; sourceTree = ""; }; + 6824CDD91B0D5AA700F73447 /* XCCOperationDataView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCOperationDataView.m; sourceTree = ""; }; + 6824CDDC1B0DA34500F73447 /* XCCMainController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCMainController.h; sourceTree = ""; }; + 6824CDDD1B0DA34500F73447 /* XCCMainController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCMainController.m; sourceTree = ""; }; + 6824CDE81B0E9CDB00F73447 /* XCCOperationErrorDataView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCOperationErrorDataView.h; sourceTree = ""; }; + 6824CDE91B0E9CDB00F73447 /* XCCOperationErrorDataView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCOperationErrorDataView.m; sourceTree = ""; }; + 6824CDEE1B0E9F1400F73447 /* XCCOperationError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XCCOperationError.h; path = XcodeCapp/XCCOperationError.h; sourceTree = ""; }; + 6824CDEF1B0E9F1400F73447 /* XCCOperationError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XCCOperationError.m; path = XcodeCapp/XCCOperationError.m; sourceTree = ""; }; + 6841F23B1AF98CE600CFE60E /* XcodeCapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XcodeCapp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6841F23F1AF98CE600CFE60E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6841F2401AF98CE600CFE60E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 6841F2431AF98CE600CFE60E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 6841F2451AF98CE600CFE60E /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ../Images.xcassets; sourceTree = ""; }; + 6841F25F1AF98DCB00CFE60E /* DDASLLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDASLLogger.h; sourceTree = ""; }; + 6841F2601AF98DCB00CFE60E /* DDASLLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDASLLogger.m; sourceTree = ""; }; + 6841F2611AF98DCB00CFE60E /* DDLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLog.h; sourceTree = ""; }; + 6841F2621AF98DCB00CFE60E /* DDLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLog.m; sourceTree = ""; }; + 6841F2631AF98DCB00CFE60E /* DDTTYLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTTYLogger.h; sourceTree = ""; }; + 6841F2641AF98DCB00CFE60E /* DDTTYLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTTYLogger.m; sourceTree = ""; }; + 6841F2691AF98DDD00CFE60E /* mod_pbxproj.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = mod_pbxproj.py; sourceTree = ""; }; + 6841F26B1AF98DDD00CFE60E /* pbxprojModifier.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = pbxprojModifier.py; sourceTree = ""; }; + 6841F2741AF98F6F00CFE60E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; + 6841F2761AF98FA300CFE60E /* DDLogLevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLogLevel.h; sourceTree = ""; }; + 6841F2771AF98FA300CFE60E /* DDLogLevel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLogLevel.m; sourceTree = ""; }; + 6841F2791AF9902B00CFE60E /* XcodeCapp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XcodeCapp-Prefix.pch"; sourceTree = ""; }; + 6841F27A1AF990C300CFE60E /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 6841F27B1AF990C300CFE60E /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 6841F28A1AF9932300CFE60E /* project.pbxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.pbxproject; path = project.pbxproj; sourceTree = ""; }; + 6841F2B61AFA83D500CFE60E /* XCCUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCUserDefaults.m; sourceTree = ""; }; + 6841F2B81AFA83E900CFE60E /* XCCUserDefaults.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XCCUserDefaults.h; sourceTree = ""; }; + 6841F2BD1AFA965300CFE60E /* XCCTaskLauncher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCTaskLauncher.h; sourceTree = ""; }; + 6841F2BE1AFA965300CFE60E /* XCCTaskLauncher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCTaskLauncher.m; sourceTree = ""; }; + 6841F2C21AFABD7200CFE60E /* XCCCappuccinoProject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XCCCappuccinoProject.h; path = XcodeCapp/XCCCappuccinoProject.h; sourceTree = ""; }; + 6841F2C31AFABD7200CFE60E /* XCCCappuccinoProject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XCCCappuccinoProject.m; path = XcodeCapp/XCCCappuccinoProject.m; sourceTree = ""; }; + 6841F2C61AFADEBC00CFE60E /* XCCSourcesFinderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCSourcesFinderOperation.h; sourceTree = ""; }; + 6841F2C71AFADEBC00CFE60E /* XCCSourcesFinderOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCSourcesFinderOperation.m; sourceTree = ""; }; + 6841F2C81AFADEBC00CFE60E /* XCCSourceProcessingOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCSourceProcessingOperation.h; sourceTree = ""; }; + 6841F2C91AFADEBC00CFE60E /* XCCSourceProcessingOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCSourceProcessingOperation.m; sourceTree = ""; }; + 6863FBA11AFD55A900040C8E /* XCCFSEventLogUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCFSEventLogUtils.h; sourceTree = ""; }; + 6863FBA21AFD55A900040C8E /* XCCFSEventLogUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCFSEventLogUtils.m; sourceTree = ""; }; + 686ACD301B16397F0089EB03 /* XCCCappuccinoProjectController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCCappuccinoProjectController.m; sourceTree = ""; }; + 686ACD331B1691AA0089EB03 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 686C696F1B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCOperationErrorHeaderDataView.h; sourceTree = ""; }; + 686C69701B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCOperationErrorHeaderDataView.m; sourceTree = ""; }; + 68B6BF301B1E2546003B265B /* XCCPPXOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCCPPXOperation.h; sourceTree = ""; }; + 68B6BF311B1E2546003B265B /* XCCPPXOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCCPPXOperation.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - E164FDCC1720E77100263CE3 /* Frameworks */ = { + 6841F2381AF98CE600CFE60E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E164FDD31720E77100263CE3 /* Cocoa.framework in Frameworks */, - E164FE1F1720F51E00263CE3 /* CoreServices.framework in Frameworks */, - E17B55411732F57700809FFB /* Quartz.framework in Frameworks */, - E164FDF71720EBD600263CE3 /* Growl.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E171D25A173C168C00210893 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - E171D26A173C1ADD00210893 /* CoreServices.framework in Frameworks */, - E171D25F173C168C00210893 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - E164FDC61720E77100263CE3 = { + 021B94721B20E41B00F12DDA /* XIBs */ = { isa = PBXGroup; children = ( - E164FDD81720E77100263CE3 /* XcodeCapp */, - E171D260173C168C00210893 /* xcc */, - E164FDD11720E77100263CE3 /* Frameworks */, - E164FDD01720E77100263CE3 /* Products */, + 021B946F1B20E31F00F12DDA /* SettingsView.xib */, + 021B94681B20D6FC00F12DDA /* ErrorsView.xib */, + 021B94661B20D1F800F12DDA /* OperationsView.xib */, + 6841F2471AF98CE600CFE60E /* MainMenu.xib */, + ); + name = XIBs; + sourceTree = ""; + }; + 0275390D1B227D5900F6D824 /* Externals */ = { + isa = PBXGroup; + children = ( + 0275390E1B227D6700F6D824 /* YRKSpinningProgressIndicator */, + 6841F25E1AF98DCB00CFE60E /* Lumberjack */, + ); + name = Externals; + sourceTree = ""; + }; + 0275390E1B227D6700F6D824 /* YRKSpinningProgressIndicator */ = { + isa = PBXGroup; + children = ( + 0275390F1B227D7500F6D824 /* YRKSpinningProgressIndicator.h */, + 027539101B227D7500F6D824 /* YRKSpinningProgressIndicator.m */, + ); + name = YRKSpinningProgressIndicator; + sourceTree = ""; + }; + 680621161B015BDB00CB24CD /* Views */ = { + isa = PBXGroup; + children = ( + 680621171B015BF400CB24CD /* XCCCappuccinoProjectControllerDataView.h */, + 680621181B015BF400CB24CD /* XCCCappuccinoProjectControllerDataView.m */, + 6824CDD81B0D5AA700F73447 /* XCCOperationDataView.h */, + 6824CDD91B0D5AA700F73447 /* XCCOperationDataView.m */, + 6824CDE81B0E9CDB00F73447 /* XCCOperationErrorDataView.h */, + 6824CDE91B0E9CDB00F73447 /* XCCOperationErrorDataView.m */, + 686C696F1B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.h */, + 686C69701B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.m */, + 021B94731B21112500F12DDA /* XCCWelcomeView.h */, + 021B94741B21112500F12DDA /* XCCWelcomeView.m */, + ); + name = Views; + sourceTree = ""; + }; + 6824CDDB1B0D976400F73447 /* Controllers */ = { + isa = PBXGroup; + children = ( + 6824CDDC1B0DA34500F73447 /* XCCMainController.h */, + 6824CDDD1B0DA34500F73447 /* XCCMainController.m */, + 6815BBE61AFBE6B00030D8BB /* XCCCappuccinoProjectController.h */, + 686ACD301B16397F0089EB03 /* XCCCappuccinoProjectController.m */, + 021B94631B20CECA00F12DDA /* XCCOperationsViewController.h */, + 021B94641B20CECA00F12DDA /* XCCOperationsViewController.m */, + 021B946A1B20D71200F12DDA /* XCCErrorsViewController.h */, + 021B946B1B20D71200F12DDA /* XCCErrorsViewController.m */, + 021B946D1B20E31F00F12DDA /* XCCSettingsViewController.h */, + 021B946E1B20E31F00F12DDA /* XCCSettingsViewController.m */, + ); + name = Controllers; + sourceTree = ""; + }; + 6841F2321AF98CE600CFE60E = { + isa = PBXGroup; + children = ( + 6841F2741AF98F6F00CFE60E /* CoreServices.framework */, + 6841F23D1AF98CE600CFE60E /* XcodeCapp */, + 6841F23C1AF98CE600CFE60E /* Products */, ); sourceTree = ""; }; - E164FDD01720E77100263CE3 /* Products */ = { + 6841F23C1AF98CE600CFE60E /* Products */ = { isa = PBXGroup; children = ( - E164FDCF1720E77100263CE3 /* XcodeCapp.app */, - E171D25D173C168C00210893 /* xcc */, + 6841F23B1AF98CE600CFE60E /* XcodeCapp.app */, ); name = Products; sourceTree = ""; }; - E164FDD11720E77100263CE3 /* Frameworks */ = { + 6841F23D1AF98CE600CFE60E /* XcodeCapp */ = { isa = PBXGroup; children = ( - E164FDD21720E77100263CE3 /* Cocoa.framework */, - E164FE1D1720F50100263CE3 /* CoreServices.framework */, - E164FDF61720EBD600263CE3 /* Growl.framework */, - E171D25E173C168C00210893 /* Foundation.framework */, - E164FDD41720E77100263CE3 /* Other Frameworks */, - ); - name = Frameworks; - sourceTree = ""; - }; - E164FDD41720E77100263CE3 /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - E164FDD51720E77100263CE3 /* AppKit.framework */, - E164FDD61720E77100263CE3 /* CoreData.framework */, - E164FDD71720E77100263CE3 /* Foundation.framework */, - E17B55401732F57700809FFB /* Quartz.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - E164FDD81720E77100263CE3 /* XcodeCapp */ = { - isa = PBXGroup; - children = ( - E1E90C60173B42D0005C6D5B /* MainMenu.xib */, - E164FDF41720EBC100263CE3 /* AppController.m */, - E1E90C371735D82B005C6D5B /* AppController.h */, - E164FDFB1720EC5B00263CE3 /* XcodeCapp.m */, - E1E90C401735D846005C6D5B /* XcodeCapp.h */, - E14015411740248C006C2792 /* XcodeProjectCloser.m */, - E14015401740248C006C2792 /* XcodeProjectCloser.h */, - E1E90C3C1735D846005C6D5B /* Notifications.m */, - E1E90C3B1735D846005C6D5B /* Notifications.h */, - E1E90C3F1735D846005C6D5B /* UserDefaults.m */, - E1E90C3E1735D846005C6D5B /* UserDefaults.h */, - E1E90C391735D846005C6D5B /* DDLogLevel.m */, - E1E90C381735D846005C6D5B /* DDLogLevel.h */, - E1A55947172C5EA80088FB61 /* Operations */, - E1E90C441735D8A1005C6D5B /* Lumberjack */, - E164FE121720F3E100263CE3 /* Scripts */, - E164FE071720F25400263CE3 /* Resources */, - E164FDD91720E77100263CE3 /* Supporting Files */, + 6841F2401AF98CE600CFE60E /* AppDelegate.h */, + 0255B83F1B1F71FB000CA4BC /* AppDelegate.m */, + 6824CDDB1B0D976400F73447 /* Controllers */, + 68F3B95A1B0CFBCF00A7EF70 /* Models */, + 680621161B015BDB00CB24CD /* Views */, + 6841F2C51AFADE7D00CFE60E /* Operations */, + 6841F2C01AFABD0900CFE60E /* Utils */, + 6841F2681AF98DDD00CFE60E /* Scripts */, + 6841F23E1AF98CE600CFE60E /* Supporting Files */, + 021B94721B20E41B00F12DDA /* XIBs */, + 6841F27E1AF9932300CFE60E /* Resources */, + 0275390D1B227D5900F6D824 /* Externals */, ); path = XcodeCapp; sourceTree = ""; }; - E164FDD91720E77100263CE3 /* Supporting Files */ = { + 6841F23E1AF98CE600CFE60E /* Supporting Files */ = { isa = PBXGroup; children = ( - E1E90C68173B48DA005C6D5B /* Info.plist */, - E1E90C65173B44CC005C6D5B /* InfoPlist.strings */, - E164FDDE1720E77100263CE3 /* main.m */, - E164FDE01720E77100263CE3 /* XcodeCapp-Prefix.pch */, - E164FDEF1720E7FA00263CE3 /* Debug.xcconfig */, - E164FDF01720E7FA00263CE3 /* Release.xcconfig */, + 6841F27A1AF990C300CFE60E /* Debug.xcconfig */, + 6841F27B1AF990C300CFE60E /* Release.xcconfig */, + 6841F23F1AF98CE600CFE60E /* Info.plist */, + 6841F2791AF9902B00CFE60E /* XcodeCapp-Prefix.pch */, + 6841F2431AF98CE600CFE60E /* main.m */, ); name = "Supporting Files"; sourceTree = ""; }; - E164FE071720F25400263CE3 /* Resources */ = { + 6841F25E1AF98DCB00CFE60E /* Lumberjack */ = { isa = PBXGroup; children = ( - 68A43033191BF044008A68A7 /* help.pdf */, - E1ED6B6F173414E100641628 /* icon_128x128.png */, - E1ED6B70173414E100641628 /* icon_128x128@2x.png */, - E164FE2D1721A34900263CE3 /* icon-inactive.png */, - E170C40117298833003DC489 /* icon-inactive@2x.png */, - E164FE2E1721A34900263CE3 /* icon-working.png */, - E170C40217298833003DC489 /* icon-working@2x.png */, - E164FE2C1721A34900263CE3 /* icon-active.png */, - E170C3FE17298833003DC489 /* icon-active@2x.png */, - E170C3FF17298833003DC489 /* icon-error.png */, - E170C40017298833003DC489 /* icon-error@2x.png */, - E17A822C172700B90095CD83 /* XcodeCapp.iconset */, - E164FE2A172188F300263CE3 /* project.pbxproj */, - E164FE191720F49A00263CE3 /* Growl Registration Ticket.growlRegDict */, + 6841F25F1AF98DCB00CFE60E /* DDASLLogger.h */, + 6841F2601AF98DCB00CFE60E /* DDASLLogger.m */, + 6841F2611AF98DCB00CFE60E /* DDLog.h */, + 6841F2621AF98DCB00CFE60E /* DDLog.m */, + 6841F2631AF98DCB00CFE60E /* DDTTYLogger.h */, + 6841F2641AF98DCB00CFE60E /* DDTTYLogger.m */, ); - name = Resources; + path = Lumberjack; sourceTree = ""; }; - E164FE121720F3E100263CE3 /* Scripts */ = { + 6841F2681AF98DDD00CFE60E /* Scripts */ = { isa = PBXGroup; children = ( - E164FE171720F44B00263CE3 /* parser.j */, - E164FE141720F40400263CE3 /* pbxprojModifier.py */, - E164FE131720F40400263CE3 /* mod_pbxproj.py */, + 0258004A1B1E67090000EB7D /* supawhich */, + 6841F2691AF98DDD00CFE60E /* mod_pbxproj.py */, + 6841F26B1AF98DDD00CFE60E /* pbxprojModifier.py */, ); path = Scripts; sourceTree = ""; }; - E171D260173C168C00210893 /* xcc */ = { + 6841F27E1AF9932300CFE60E /* Resources */ = { isa = PBXGroup; children = ( - E171D261173C168C00210893 /* main.m */, - E171D263173C168C00210893 /* Supporting Files */, + 6841F2451AF98CE600CFE60E /* Images.xcassets */, + 6841F28A1AF9932300CFE60E /* project.pbxproj */, ); - path = xcc; + path = Resources; sourceTree = ""; }; - E171D263173C168C00210893 /* Supporting Files */ = { + 6841F2C01AFABD0900CFE60E /* Utils */ = { isa = PBXGroup; children = ( - E171D264173C168C00210893 /* xcc-Prefix.pch */, + 681ADE8D1B0D032C00FC8E08 /* XCCPath.h */, + 681ADE8E1B0D032C00FC8E08 /* XCCPath.m */, + 6841F2B61AFA83D500CFE60E /* XCCUserDefaults.m */, + 6841F2B81AFA83E900CFE60E /* XCCUserDefaults.h */, + 6841F2BD1AFA965300CFE60E /* XCCTaskLauncher.h */, + 6841F2BE1AFA965300CFE60E /* XCCTaskLauncher.m */, + 6841F2761AF98FA300CFE60E /* DDLogLevel.h */, + 6841F2771AF98FA300CFE60E /* DDLogLevel.m */, + 6815BBE91AFC24430030D8BB /* XcodeProjectCloser.h */, + 6815BBEA1AFC24430030D8BB /* XcodeProjectCloser.m */, + 6863FBA11AFD55A900040C8E /* XCCFSEventLogUtils.h */, + 6863FBA21AFD55A900040C8E /* XCCFSEventLogUtils.m */, + 0258003A1B1E1C470000EB7D /* NSMutableArray+moveIndexes.h */, + 0258003B1B1E1C470000EB7D /* NSMutableArray+moveIndexes.m */, ); - name = "Supporting Files"; + name = Utils; sourceTree = ""; }; - E1A55947172C5EA80088FB61 /* Operations */ = { + 6841F2C51AFADE7D00CFE60E /* Operations */ = { isa = PBXGroup; children = ( - E1A55949172C5EE20088FB61 /* FindSourceFilesOperation.m */, - E1E90C3A1735D846005C6D5B /* FindSourceFilesOperation.h */, - E1A5594C172CA8D40088FB61 /* ProcessSourceOperation.m */, - E1E90C3D1735D846005C6D5B /* ProcessSourceOperation.h */, + 6841F2C61AFADEBC00CFE60E /* XCCSourcesFinderOperation.h */, + 6841F2C71AFADEBC00CFE60E /* XCCSourcesFinderOperation.m */, + 6841F2C81AFADEBC00CFE60E /* XCCSourceProcessingOperation.h */, + 6841F2C91AFADEBC00CFE60E /* XCCSourceProcessingOperation.m */, + 68B6BF301B1E2546003B265B /* XCCPPXOperation.h */, + 68B6BF311B1E2546003B265B /* XCCPPXOperation.m */, + 025800431B1E3F010000EB7D /* XCCAbstractOperation.h */, + 025800441B1E3F010000EB7D /* XCCAbstractOperation.m */, ); name = Operations; sourceTree = ""; }; - E1E90C441735D8A1005C6D5B /* Lumberjack */ = { + 68F3B95A1B0CFBCF00A7EF70 /* Models */ = { isa = PBXGroup; children = ( - E1E90C451735D8A1005C6D5B /* DDASLLogger.h */, - E1E90C461735D8A1005C6D5B /* DDASLLogger.m */, - E1E90C471735D8A1005C6D5B /* DDLog.h */, - E1E90C481735D8A1005C6D5B /* DDLog.m */, - E1E90C491735D8A1005C6D5B /* DDTTYLogger.h */, - E1E90C4A1735D8A1005C6D5B /* DDTTYLogger.m */, + 6841F2C21AFABD7200CFE60E /* XCCCappuccinoProject.h */, + 6841F2C31AFABD7200CFE60E /* XCCCappuccinoProject.m */, + 6824CDEE1B0E9F1400F73447 /* XCCOperationError.h */, + 6824CDEF1B0E9F1400F73447 /* XCCOperationError.m */, ); - path = Lumberjack; + name = Models; + path = ..; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - E164FDCE1720E77100263CE3 /* XcodeCapp */ = { + 6841F23A1AF98CE600CFE60E /* XcodeCapp */ = { isa = PBXNativeTarget; - buildConfigurationList = E164FDEC1720E77100263CE3 /* Build configuration list for PBXNativeTarget "XcodeCapp" */; + buildConfigurationList = 6841F2581AF98CE600CFE60E /* Build configuration list for PBXNativeTarget "XcodeCapp" */; buildPhases = ( - E164FDCB1720E77100263CE3 /* Sources */, - E164FDCC1720E77100263CE3 /* Frameworks */, - E164FDCD1720E77100263CE3 /* Resources */, - E164FE201720F54800263CE3 /* CopyFiles */, - E170C3F9172961E6003DC489 /* CopyFiles */, - E171D26B173C1C6900210893 /* CopyFiles */, + 6841F2371AF98CE600CFE60E /* Sources */, + 6841F2381AF98CE600CFE60E /* Frameworks */, + 6841F2391AF98CE600CFE60E /* Resources */, ); buildRules = ( ); dependencies = ( - E171D26E173C405C00210893 /* PBXTargetDependency */, ); name = XcodeCapp; productName = XcodeCapp; - productReference = E164FDCF1720E77100263CE3 /* XcodeCapp.app */; + productReference = 6841F23B1AF98CE600CFE60E /* XcodeCapp.app */; productType = "com.apple.product-type.application"; }; - E171D25C173C168C00210893 /* xcc */ = { - isa = PBXNativeTarget; - buildConfigurationList = E171D269173C168C00210893 /* Build configuration list for PBXNativeTarget "xcc" */; - buildPhases = ( - E171D259173C168C00210893 /* Sources */, - E171D25A173C168C00210893 /* Frameworks */, - E171D25B173C168C00210893 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = xcc; - productName = xcc; - productReference = E171D25D173C168C00210893 /* xcc */; - productType = "com.apple.product-type.tool"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - E164FDC71720E77100263CE3 /* Project object */ = { + 6841F2331AF98CE600CFE60E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; - ORGANIZATIONNAME = "Cappuccino Project"; + LastUpgradeCheck = 0630; + ORGANIZATIONNAME = "cappuccino-project"; + TargetAttributes = { + 6841F23A1AF98CE600CFE60E = { + CreatedOnToolsVersion = 6.3.1; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 0; + }; + }; + }; + }; }; - buildConfigurationList = E164FDCA1720E77100263CE3 /* Build configuration list for PBXProject "XcodeCapp" */; + buildConfigurationList = 6841F2361AF98CE600CFE60E /* Build configuration list for PBXProject "XcodeCapp" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); - mainGroup = E164FDC61720E77100263CE3; - productRefGroup = E164FDD01720E77100263CE3 /* Products */; + mainGroup = 6841F2321AF98CE600CFE60E; + productRefGroup = 6841F23C1AF98CE600CFE60E /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - E164FDCE1720E77100263CE3 /* XcodeCapp */, - E171D25C173C168C00210893 /* xcc */, + 6841F23A1AF98CE600CFE60E /* XcodeCapp */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - E164FDCD1720E77100263CE3 /* Resources */ = { + 6841F2391AF98CE600CFE60E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - E10E4CD717298E5F004AB09E /* project.pbxproj in Resources */, - E164FE181720F44B00263CE3 /* parser.j in Resources */, - E164FE1A1720F49A00263CE3 /* Growl Registration Ticket.growlRegDict in Resources */, - 68A43034191BF044008A68A7 /* help.pdf in Resources */, - E164FE2F1721A34900263CE3 /* icon-active.png in Resources */, - E164FE301721A34900263CE3 /* icon-inactive.png in Resources */, - E164FE311721A34900263CE3 /* icon-working.png in Resources */, - E17A822D172700B90095CD83 /* XcodeCapp.iconset in Resources */, - E170C40317298833003DC489 /* icon-active@2x.png in Resources */, - E170C40417298833003DC489 /* icon-error.png in Resources */, - E170C40517298833003DC489 /* icon-error@2x.png in Resources */, - E170C40617298833003DC489 /* icon-inactive@2x.png in Resources */, - E170C40717298833003DC489 /* icon-working@2x.png in Resources */, - E1ED6B71173414E100641628 /* icon_128x128.png in Resources */, - E1ED6B72173414E100641628 /* icon_128x128@2x.png in Resources */, - E1E90C62173B42D0005C6D5B /* MainMenu.xib in Resources */, - E1E90C67173B44CC005C6D5B /* InfoPlist.strings in Resources */, + 6841F2461AF98CE600CFE60E /* Images.xcassets in Resources */, + 021B94671B20D1F800F12DDA /* OperationsView.xib in Resources */, + 021B94711B20E31F00F12DDA /* SettingsView.xib in Resources */, + 0258004B1B1E67090000EB7D /* supawhich in Resources */, + 6841F27C1AF990C300CFE60E /* Debug.xcconfig in Resources */, + 6841F26E1AF98DDD00CFE60E /* pbxprojModifier.py in Resources */, + 6841F2A51AF9932300CFE60E /* project.pbxproj in Resources */, + 6841F27D1AF990C300CFE60E /* Release.xcconfig in Resources */, + 0257A65B1B3A2B0000015C1F /* MainMenu.xib in Resources */, + 6841F26C1AF98DDD00CFE60E /* mod_pbxproj.py in Resources */, + 021B94691B20D6FC00F12DDA /* ErrorsView.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - E164FDCB1720E77100263CE3 /* Sources */ = { + 6841F2371AF98CE600CFE60E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E164FDDF1720E77100263CE3 /* main.m in Sources */, - E164FDF51720EBC100263CE3 /* AppController.m in Sources */, - E164FDFF1720EC5B00263CE3 /* XcodeCapp.m in Sources */, - E1A5594A172C5EE20088FB61 /* FindSourceFilesOperation.m in Sources */, - E1A5594D172CA8D40088FB61 /* ProcessSourceOperation.m in Sources */, - E1E90C411735D846005C6D5B /* DDLogLevel.m in Sources */, - E1E90C421735D846005C6D5B /* Notifications.m in Sources */, - E1E90C431735D846005C6D5B /* UserDefaults.m in Sources */, - E1E90C4B1735D8A1005C6D5B /* DDASLLogger.m in Sources */, - E1E90C4C1735D8A1005C6D5B /* DDLog.m in Sources */, - E1E90C4D1735D8A1005C6D5B /* DDTTYLogger.m in Sources */, - E14015421740248C006C2792 /* XcodeProjectCloser.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E171D259173C168C00210893 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E171D262173C168C00210893 /* main.m in Sources */, - E1401543174025B8006C2792 /* XcodeProjectCloser.m in Sources */, + 6841F2781AF98FA300CFE60E /* DDLogLevel.m in Sources */, + 68B6BF321B1E2546003B265B /* XCCPPXOperation.m in Sources */, + 021B94701B20E31F00F12DDA /* XCCSettingsViewController.m in Sources */, + 0255B8401B1F71FB000CA4BC /* AppDelegate.m in Sources */, + 0258003C1B1E1C470000EB7D /* NSMutableArray+moveIndexes.m in Sources */, + 6841F2BF1AFA965300CFE60E /* XCCTaskLauncher.m in Sources */, + 027539111B227D7500F6D824 /* YRKSpinningProgressIndicator.m in Sources */, + 6841F2C41AFABD7200CFE60E /* XCCCappuccinoProject.m in Sources */, + 6841F2661AF98DCB00CFE60E /* DDLog.m in Sources */, + 686ACD311B16397F0089EB03 /* XCCCappuccinoProjectController.m in Sources */, + 021B946C1B20D71200F12DDA /* XCCErrorsViewController.m in Sources */, + 021B94651B20CECA00F12DDA /* XCCOperationsViewController.m in Sources */, + 6841F2CB1AFADEBC00CFE60E /* XCCSourceProcessingOperation.m in Sources */, + 6815BBEB1AFC24430030D8BB /* XcodeProjectCloser.m in Sources */, + 6824CDDE1B0DA34500F73447 /* XCCMainController.m in Sources */, + 6863FBA31AFD55A900040C8E /* XCCFSEventLogUtils.m in Sources */, + 680621191B015BF400CB24CD /* XCCCappuccinoProjectControllerDataView.m in Sources */, + 025800451B1E3F010000EB7D /* XCCAbstractOperation.m in Sources */, + 686C69711B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.m in Sources */, + 6824CDF01B0E9F1400F73447 /* XCCOperationError.m in Sources */, + 021B94751B21112500F12DDA /* XCCWelcomeView.m in Sources */, + 6841F2671AF98DCB00CFE60E /* DDTTYLogger.m in Sources */, + 6841F2441AF98CE600CFE60E /* main.m in Sources */, + 6824CDDA1B0D5AA700F73447 /* XCCOperationDataView.m in Sources */, + 6841F2CA1AFADEBC00CFE60E /* XCCSourcesFinderOperation.m in Sources */, + 681ADE8F1B0D032C00FC8E08 /* XCCPath.m in Sources */, + 6841F2651AF98DCB00CFE60E /* DDASLLogger.m in Sources */, + 6841F2B71AFA83D500CFE60E /* XCCUserDefaults.m in Sources */, + 6824CDEA1B0E9CDB00F73447 /* XCCOperationErrorDataView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - E171D26E173C405C00210893 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = E171D25C173C168C00210893 /* xcc */; - targetProxy = E171D26D173C405C00210893 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ - E1E90C60173B42D0005C6D5B /* MainMenu.xib */ = { + 6841F2471AF98CE600CFE60E /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( - E1E90C61173B42D0005C6D5B /* en */, + 686ACD331B1691AA0089EB03 /* Base */, ); name = MainMenu.xib; sourceTree = ""; }; - E1E90C65173B44CC005C6D5B /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - E1E90C66173B44CC005C6D5B /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - E164FDEA1720E77100263CE3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E164FDEF1720E7FA00263CE3 /* Debug.xcconfig */; - buildSettings = { - DSTROOT = /; - ONLY_ACTIVE_ARCH = YES; - }; - name = Debug; - }; - E164FDEB1720E77100263CE3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E164FDF01720E7FA00263CE3 /* Release.xcconfig */; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEPLOYMENT_LOCATION = YES; - DSTROOT = /; - }; - name = Release; - }; - E164FDED1720E77100263CE3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/XcodeCapp\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.6.8; - }; - name = Debug; - }; - E164FDEE1720E77100263CE3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/XcodeCapp\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.6.8; - }; - name = Release; - }; - E171D267173C168C00210893 /* Debug */ = { + 6841F2561AF98CE600CFE60E /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6841F27A1AF990C300CFE60E /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEPLOYMENT_LOCATION = YES; + DSTROOT = /; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "xcc/xcc-Prefix.pch"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; name = Debug; }; - E171D268173C168C00210893 /* Release */ = { + 6841F2571AF98CE600CFE60E /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6841F27B1AF990C300CFE60E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEPLOYMENT_LOCATION = NO; + DEPLOYMENT_LOCATION = YES; + DSTROOT = /; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "xcc/xcc-Prefix.pch"; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - PRODUCT_NAME = "$(TARGET_NAME)"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; }; name = Release; }; + 6841F2591AF98CE600CFE60E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + DSTROOT = /; + INFOPLIST_FILE = XcodeCapp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 6841F25A1AF98CE600CFE60E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + DSTROOT = /; + INFOPLIST_FILE = XcodeCapp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - E164FDCA1720E77100263CE3 /* Build configuration list for PBXProject "XcodeCapp" */ = { + 6841F2361AF98CE600CFE60E /* Build configuration list for PBXProject "XcodeCapp" */ = { isa = XCConfigurationList; buildConfigurations = ( - E164FDEA1720E77100263CE3 /* Debug */, - E164FDEB1720E77100263CE3 /* Release */, + 6841F2561AF98CE600CFE60E /* Debug */, + 6841F2571AF98CE600CFE60E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E164FDEC1720E77100263CE3 /* Build configuration list for PBXNativeTarget "XcodeCapp" */ = { + 6841F2581AF98CE600CFE60E /* Build configuration list for PBXNativeTarget "XcodeCapp" */ = { isa = XCConfigurationList; buildConfigurations = ( - E164FDED1720E77100263CE3 /* Debug */, - E164FDEE1720E77100263CE3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E171D269173C168C00210893 /* Build configuration list for PBXNativeTarget "xcc" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E171D267173C168C00210893 /* Debug */, - E171D268173C168C00210893 /* Release */, + 6841F2591AF98CE600CFE60E /* Debug */, + 6841F25A1AF98CE600CFE60E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = E164FDC71720E77100263CE3 /* Project object */; + rootObject = 6841F2331AF98CE600CFE60E /* Project object */; } diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.h b/Tools/XcodeCapp/XcodeCapp/AppController.h deleted file mode 100644 index 7278bd236..000000000 --- a/Tools/XcodeCapp/XcodeCapp/AppController.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is a part of program XcodeCapp - * Copyright (C) 2011 Antoine Mercadal () - * - * 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 3 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, see . - */ - -#import -#import -#import - -@class XcodeCapp; - -@interface AppController : NSObject - -@property (strong) IBOutlet NSMenu *statusMenu; -@property (unsafe_unretained) IBOutlet NSMenuItem *menuItemHistory; -@property (unsafe_unretained) IBOutlet NSMenuItem *menuItemOpenProject; -@property (unsafe_unretained) IBOutlet NSMenuItem *menuItemShowInFinder; - -@property (strong) IBOutlet NSPanel *aboutWindow; -@property (strong) IBOutlet NSWindow *preferencesWindow; - -@property (strong) IBOutlet NSWindow *helpWindow; -@property (unsafe_unretained) IBOutlet PDFView *helpView; - -@property (strong) IBOutlet NSUserDefaultsController *preferencesController; -@property (strong) IBOutlet XcodeCapp *xcc; - -+ (AppController *)sharedAppController; - -- (IBAction)createProject:(id)sender; -- (IBAction)loadProject:(id)aSender; -- (IBAction)openHelp:(id)aSender; -- (IBAction)openAbout:(id)aSender; - -@end - diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m deleted file mode 100644 index cd37746ac..000000000 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ /dev/null @@ -1,541 +0,0 @@ -/* - * This file is a part of program XcodeCapp - * Copyright (C) 2011 Antoine Mercadal () - * - * 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 3 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, see . - */ - - -#import - -#import "AppController.h" -#import "Notifications.h" -#import "XcodeCapp.h" -#import "UserDefaults.h" - - -AppController *SharedAppControllerInstance = nil; - - -@interface AppController () - -@property (nonatomic) NSImage *iconActive; -@property (nonatomic) NSImage *iconInactive; -@property (nonatomic) NSImage *iconWorking; -@property (nonatomic) NSImage *iconError; -@property (nonatomic) NSMenu *recentMenu; -@property NSStatusItem *statusItem; -@property NSString *finderName; -@property BOOL appFinishedLaunching; -@property NSString *pathToOpenAtLaunch; -@property NSFileManager *fm; - -@end - - -@implementation AppController - -+ (AppController *)sharedAppController -{ - return SharedAppControllerInstance; -} - -#pragma mark - Initialization - -- (void)awakeFromNib -{ - SharedAppControllerInstance = self; - self.fm = [NSFileManager defaultManager]; - - [self registerDefaultPreferences]; - [self initLogging]; - - DDLogVerbose(@"\n******************************\n** XcodeCapp started **\n******************************\n"); - - self.aboutWindow.backgroundColor = [NSColor whiteColor]; - [self initStatusItem]; - [self initObservers]; - [self initShowInFinderItem]; - [self pruneProjectHistory]; - [self updateHistoryMenu]; - [self checkFirstLaunch]; -} - -- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename -{ - if (filename) - { - NSString *path = filename.stringByStandardizingPath; - - if (self.appFinishedLaunching) - return [self loadProjectAtPath:path reopening:YES]; - else - self.pathToOpenAtLaunch = path; - } - - return YES; -} - -- (void)applicationDidFinishLaunching:(NSNotification *)notification -{ - self.appFinishedLaunching = YES; - - if (![self.xcc executablesAreAccessible]) - { - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - - NSRunAlertPanel( - @"Executables are missing.", - @"Please make sure that each one of these executables:\n\n" - @"%@\n\n" - @"(or a symlink to it) is within one these directories:\n\n" - @"%@\n\n" - @"They do not all have to be in the same directory.", - @"Quit", - nil, - nil, - [self.xcc.executables componentsJoinedByString:@"\n"], - [self.xcc.environmentPaths componentsJoinedByString:@"\n"]); - - [[NSApplication sharedApplication] terminate:self]; - return; - } - - // If we were opened from the command line, self.pathToOpenAtLaunch will be set. - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - if (!self.pathToOpenAtLaunch) - { - if (![defaults boolForKey:kDefaultXCCReopenLastProject]) - return; - - self.pathToOpenAtLaunch = [defaults objectForKey:kDefaultLastOpenedPath]; - } - - if (self.pathToOpenAtLaunch) - { - if ([[NSFileManager defaultManager] fileExistsAtPath:self.pathToOpenAtLaunch]) - [self loadProjectAtPath:self.pathToOpenAtLaunch reopening:YES]; - else - [defaults removeObjectForKey:kDefaultLastOpenedPath]; - } -} - -/*! - Register default values for preferences -*/ -- (void)registerDefaultPreferences -{ - NSDictionary *appDefaults = @{ - kDefaultLastEventId: [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], - kDefaultFirstLaunch: @YES, - kDefaultFirstLaunchVersion: @2.0, - kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], - kDefaultXCCReactToInodeMod: @YES, - kDefaultXCCReopenLastProject: @YES, - kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, - kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, - kDefaultXCCAutoShowNotificationOnErrors: @YES, - kDefaultXCCAutoShowNotificationOnCappLint: @YES, - kDefaultXCCProjectHistory: [NSArray new], - kDefaultMaxRecentProjects: @20, - kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], - kDefaultAutoOpenXcodeProject: @YES, - kDefaultUseSymlinkWhenCreatingProject: @YES, - kDefaultXCCUseDebugFrameworkWithObjj: @YES, - kDefaultXCCShouldProcessObjj: @YES, - kDefaultXCCPanelStyleUtility: @NO, - kDefaultXCCPanelActiveAppWhenOpening: @NO - }; - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - [defaults registerDefaults:appDefaults]; - [defaults synchronize]; - - [defaults addObserver:self - forKeyPath:kDefaultMaxRecentProjects - options:NSKeyValueObservingOptionNew - context:NULL]; -} - -- (void)initLogging -{ -#if DEBUG - [DDLog addLogger:[DDTTYLogger sharedInstance]]; - [[DDTTYLogger sharedInstance] setColorsEnabled:YES]; - [DDLogLevel setLogLevel:LOG_LEVEL_VERBOSE]; -#else - [DDLog addLogger:[DDASLLogger sharedInstance]]; - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - int logLevel = (int)[defaults integerForKey:kDefaultLogLevel]; - NSUInteger modifiers = [NSEvent modifierFlags]; - - if (modifiers & NSAlternateKeyMask) - logLevel = LOG_LEVEL_VERBOSE; - - [DDLogLevel setLogLevel:logLevel]; -#endif -} - -- (void)initStatusItem -{ - self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; - self.statusItem.menu = self.statusMenu; - self.statusItem.image = self.iconInactive; - self.statusItem.highlightMode = YES; - self.statusItem.length = self.iconInactive.size.width + 12; // Add some space around the icon - self.statusMenu.delegate = self; -} - -- (void)initObservers -{ - NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; - - [defaultCenter addObserver:self selector:@selector(batchDidStart:) name:XCCBatchDidStartNotification object:nil]; - [defaultCenter addObserver:self selector:@selector(batchDidEnd:) name:XCCBatchDidEndNotification object:nil]; - [defaultCenter addObserver:self selector:@selector(projectDidFinishLoading:) name:XCCProjectDidFinishLoadingNotification object:nil]; -} - -- (void)initShowInFinderItem -{ - // See if PathFinder is available - NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; - NSString *path = [workspace absolutePathForAppBundleWithIdentifier:@"com.cocoatech.PathFinder"]; - - if (path) - self.finderName = path.lastPathComponent.stringByDeletingPathExtension; - else - self.finderName = @"Finder"; - - self.menuItemShowInFinder.title = [NSString stringWithFormat:self.menuItemShowInFinder.title, self.finderName]; -} - -- (void)pruneProjectHistory -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSMutableArray *projectHistory = [[defaults arrayForKey:kDefaultXCCProjectHistory] mutableCopy]; - NSFileManager *fm = [NSFileManager new]; - - for (NSInteger i = projectHistory.count - 1; i >= 0; --i) - { - if (![fm fileExistsAtPath:projectHistory[i]]) - [projectHistory removeObjectAtIndex:i]; - } - - NSInteger maxProjects = [defaults integerForKey:kDefaultMaxRecentProjects]; - - if (projectHistory.count > maxProjects) - [projectHistory removeObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(maxProjects, projectHistory.count - maxProjects)]]; - - [defaults setObject:projectHistory forKey:kDefaultXCCProjectHistory]; -} - -- (void)checkFirstLaunch -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - double firstLaunchVersion = [defaults doubleForKey:kDefaultFirstLaunchVersion]; - - // Note: the scanner will only get the major.minor version numbers, which is what we want. - NSScanner *scanner = [NSScanner scannerWithString:[self bundleVersion]]; - double appVersion = 0.0; - [scanner scanDouble:&appVersion]; - - if ([defaults boolForKey:kDefaultFirstLaunch] || appVersion > firstLaunchVersion) - { - [defaults setBool:NO forKey:kDefaultFirstLaunch]; - [defaults setDouble:appVersion forKey:kDefaultFirstLaunchVersion]; - [self openHelp:self]; - } -} - -#pragma mark - Properties - -- (NSImage *)iconActive -{ - if (!_iconActive) - _iconActive = [NSImage imageNamed:@"icon-active"]; - - return _iconActive; -} - -- (NSImage *)iconInactive -{ - if (!_iconInactive) - _iconInactive = [NSImage imageNamed:@"icon-inactive"]; - - return _iconInactive; -} - -- (NSImage *)iconWorking -{ - if (!_iconWorking) - _iconWorking = [NSImage imageNamed:@"icon-working"]; - - return _iconWorking; -} - -- (NSImage *)iconError -{ - if (!_iconError) - _iconError = [NSImage imageNamed:@"icon-error"]; - - return _iconError; -} - -- (NSMenu *)recentMenu -{ - if (!_recentMenu) - { - _recentMenu = [NSMenu new]; - _recentMenu.delegate = self; - self.menuItemHistory.submenu = _recentMenu; - } - - return _recentMenu; -} - -#pragma mark - Notification handlers - -- (void)batchDidStart:(NSNotification *)note -{ - DDLogVerbose(@"Batch start"); - - self.statusItem.image = self.iconWorking; -} - -- (void)batchDidEnd:(NSNotification *)note -{ - DDLogVerbose(@"Batch end"); - - if (!self.xcc.isLoadingProject) - self.statusItem.image = self.xcc.hasErrors ? self.iconError : self.iconActive; -} - -- (void)projectDidFinishLoading:(NSNotification *)note -{ - self.statusItem.image = self.xcc.hasErrors ? self.iconError : self.iconActive; - self.menuItemOpenProject.title = [NSString stringWithFormat:@"Close “%@”", self.xcc.projectPath.lastPathComponent]; - self.menuItemOpenProject.action = @selector(closeProject:); -} - -// Watch changes to the max recent projects preference -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if ([keyPath isEqualToString:kDefaultMaxRecentProjects]) - [self pruneProjectHistory]; -} - -#pragma mark - Actions - -- (IBAction)loadProject:(id)aSender -{ - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - - NSOpenPanel *openPanel = [NSOpenPanel openPanel]; - openPanel.title = @"Choose Cappuccino Project"; - openPanel.canChooseDirectories = YES; - openPanel.canCreateDirectories = YES; - openPanel.canChooseFiles = NO; - - if ([openPanel runModal] != NSFileHandlingPanelOKButton) - return; - - NSString *projectPath = [[openPanel.URLs[0] path] stringByStandardizingPath]; - [self loadProjectAtPath:projectPath reopening:YES]; -} - -- (void)closeProject:(id)aSender -{ - [self.xcc stop]; - - self.statusItem.image = self.iconInactive; - self.menuItemOpenProject.title = @"Open Project…"; - self.menuItemOpenProject.action = @selector(loadProject:); - - [[NSUserDefaults standardUserDefaults] removeObjectForKey:kDefaultLastOpenedPath]; -} - -- (void)switchToProject:(NSMenuItem *)aSender -{ - [self loadProjectAtPath:aSender.representedObject reopening:NO]; -} - -- (void)clearProjectHistory:(id)aSender -{ - [[NSUserDefaults standardUserDefaults] setObject:[NSArray array] forKey:kDefaultXCCProjectHistory]; - [self updateHistoryMenu]; -} - -- (IBAction)showInFinder:(id)aSender -{ - [[NSWorkspace sharedWorkspace] openFile:self.xcc.projectPath withApplication:self.finderName]; -} - -- (IBAction)openHelp:(id)aSender -{ - if (!self.helpView.document) - { - NSURL *helpURL = [[NSBundle mainBundle] URLForResource:@"help" withExtension:@"pdf"]; - PDFDocument *help = [[PDFDocument alloc] initWithURL:helpURL]; - self.helpView.document = help; - } - - [self openWindow:self.helpWindow]; -} - -- (IBAction)openAbout:(id)aSender -{ - [self openWindow:self.aboutWindow]; -} - -- (IBAction)openPreferences:(id)aSender -{ - [self openWindow:self.preferencesWindow]; -} - -- (IBAction)createProject:(id)sender -{ - NSSavePanel *savePanel = [NSSavePanel savePanel]; - savePanel.title = @"Create a new Cappuccino Project"; - savePanel.canCreateDirectories = YES; - - if ([savePanel runModal] != NSFileHandlingPanelOKButton) - return; - - NSString *projectPath = [[savePanel.URL path] stringByStandardizingPath]; - - NSDictionary *taskResult = [self.xcc createProject:projectPath]; - - if ([taskResult[@"status"] intValue]) - return; - - [self loadProjectAtPath:projectPath reopening:YES]; -} - -#pragma mark - Delegates - -- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app -{ - [self.xcc stop]; - - return NSTerminateNow; -} - -- (BOOL)validateMenuItem:(NSMenuItem *)aMenuItem -{ - NSMenu *menu = aMenuItem.menu; - - if (menu == self.recentMenu) - { - // Disable recent items if they don't exist or are not directories, - // but enable the Clear History item, which is last in the menu. - if ([menu indexOfItem:aMenuItem] == menu.itemArray.count - 1) - return YES; - - BOOL isDirectory; - BOOL exists = [self.fm fileExistsAtPath:aMenuItem.representedObject isDirectory:&isDirectory]; - - return exists && isDirectory; - } - - return YES; -} - -#pragma mark - Bindings - -- (NSString *)bundleVersion -{ - return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; -} - -#pragma mark - Private Helpers - - -- (BOOL)loadProjectAtPath:(NSString *)path reopening:(BOOL)reopen -{ - if (!reopen && [self.xcc.projectPath isEqualToString:path]) - return YES; - - [self closeProject:self]; - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSMutableArray *projectHistory = [[defaults arrayForKey:kDefaultXCCProjectHistory] mutableCopy]; - - if ([projectHistory containsObject:path]) - [projectHistory removeObject:path]; - - // The path may no longer be there, validate it - NSFileManager *fm = [NSFileManager defaultManager]; - - BOOL exists, isDirectory; - exists = [fm fileExistsAtPath:path isDirectory:&isDirectory]; - - if (exists && isDirectory) - { - [projectHistory insertObject:path atIndex:0]; - } - else - { - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - NSRunAlertPanel(@"Project not found.", @"%@ %@", nil, nil, nil, path, !exists ? @"no longer exists." : @"is not a directory."); - } - - [defaults setObject:projectHistory forKey:kDefaultXCCProjectHistory]; - [self pruneProjectHistory]; - [self updateHistoryMenu]; - - if (exists && isDirectory) - { - [self.xcc loadProjectAtPath:path]; - return YES; - } - else - return NO; -} - -- (void)openWindow:(NSWindow *)aWindow -{ - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - [aWindow makeKeyAndOrderFront:nil]; -} - -- (void)updateHistoryMenu -{ - [self.recentMenu removeAllItems]; - NSArray *projectHistory = [[NSUserDefaults standardUserDefaults] arrayForKey:kDefaultXCCProjectHistory]; - - for (NSString *path in projectHistory) - { - NSMenuItem *item = [self.recentMenu addItemWithTitle:path.lastPathComponent action:@selector(switchToProject:) keyEquivalent:@""]; - [item setEnabled:YES]; - item.representedObject = path; - } - - [self.recentMenu addItem:[NSMenuItem separatorItem]]; - [self.recentMenu addItemWithTitle:@"Clear history" action:@selector(clearProjectHistory:) keyEquivalent:@""]; - - self.menuItemHistory.enabled = [projectHistory count] > 0; -} - -#pragma mark - Cappuccino methods - -- (IBAction)updateCappuccino:(id)sender -{ - [self.xcc performSelectorInBackground:@selector(updateCappuccino) withObject:nil]; -} - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/AppDelegate.h b/Tools/XcodeCapp/XcodeCapp/AppDelegate.h new file mode 100644 index 000000000..0681f4678 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/AppDelegate.h @@ -0,0 +1,35 @@ +// +// AppDelegate.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/5/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import +#import + +@class XCCMainController; + + +@interface AppDelegate : NSObject +{ + IBOutlet NSMenu *statusMenu; + IBOutlet NSUserDefaultsController *preferencesController; + IBOutlet NSPanel *aboutWindow; + IBOutlet NSWindow *preferencesWindow; + + NSImage *imageStatusInactive; + NSImage *imageStatusProcessing; + NSImage *imageStatusError; + NSStatusItem *statusItem; +} + +@property IBOutlet XCCMainController *mainWindowController; +@property NSOperationQueue *mainOperationQueue; +@property NSString *version; + +- (IBAction)openAbout:(id)aSender; +- (IBAction)openPreferences:(id)aSender; + +@end \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/AppDelegate.m b/Tools/XcodeCapp/XcodeCapp/AppDelegate.m new file mode 100644 index 000000000..cc53ac681 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/AppDelegate.m @@ -0,0 +1,170 @@ +// +// AppDelegate.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/5/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "AppDelegate.h" +#import "XCCMainController.h" +#import "XCCUserDefaults.h" + +@implementation AppDelegate + + +#pragma mark - Utilities + +- (void)_initUserDefaults +{ + NSDictionary *appDefaults = @{ + XCCUserDefaultsAutoOpenXcodeProject: @YES, + XCCUserDefaultsLogLevel: @LOG_LEVEL_WARN, + XCCUserDefaultsMaxNumberOfConcurrentOperations: @20 + }; + + [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (void)_initStatusItem +{ + self->imageStatusInactive = [NSImage imageNamed:@"status-icon-inactive"]; + self->imageStatusProcessing = [NSImage imageNamed:@"status-icon-working"]; + self->imageStatusError = [NSImage imageNamed:@"status-icon-error"]; + + self->statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; + self->statusItem.menu = self->statusMenu; + self->statusItem.image = self->imageStatusInactive; + self->statusItem.highlightMode = YES; + self->statusItem.length = self->imageStatusInactive.size.width + 12; +} + +- (void)_initLogging +{ +#if DEBUG + [DDLog addLogger:[DDTTYLogger sharedInstance]]; + [[DDTTYLogger sharedInstance] setColorsEnabled:YES]; + [DDLogLevel setLogLevel:LOG_LEVEL_VERBOSE]; +#else + [DDLog addLogger:[DDASLLogger sharedInstance]]; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + int logLevel = (int)[defaults integerForKey:XCCUserDefaultsLogLevel]; + NSUInteger modifiers = [NSEvent modifierFlags]; + + if (modifiers & NSAlternateKeyMask) + logLevel = LOG_LEVEL_VERBOSE; + + [DDLogLevel setLogLevel:logLevel]; +#endif +} + +- (void)_initOperationQueue +{ + self.mainOperationQueue = [NSOperationQueue new]; + + [self.mainOperationQueue setMaxConcurrentOperationCount:[[[NSUserDefaults standardUserDefaults] objectForKey:XCCUserDefaultsMaxNumberOfConcurrentOperations] intValue]]; +} + +#pragma mark - Actions + +- (IBAction)openPreferences:(id)aSender +{ + [self->preferencesWindow makeKeyAndOrderFront:nil]; +} + +- (IBAction)openAbout:(id)aSender +{ + [self->aboutWindow makeKeyAndOrderFront:nil]; +} + + +#pragma mark - Observers + +- (void)_startObservers +{ + [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:XCCUserDefaultsMaxNumberOfConcurrentOperations options:NSKeyValueObservingOptionNew context:nil]; + + [self.mainOperationQueue addObserver:self forKeyPath:@"operationCount" options:NSKeyValueObservingOptionNew context:nil]; + [self.mainWindowController addObserver:self forKeyPath:@"totalNumberOfErrors" options:NSKeyValueObservingOptionNew context:nil]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (object == [NSUserDefaults standardUserDefaults] && [keyPath isEqualToString:XCCUserDefaultsMaxNumberOfConcurrentOperations]) + { + [self.mainOperationQueue setMaxConcurrentOperationCount:[change[NSKeyValueChangeNewKey] intValue]]; + } + else + { + NSImage *image; + + if (self.mainOperationQueue.operationCount) + image = self->imageStatusProcessing; + else if ([self.mainWindowController totalNumberOfErrors]) + image = self->imageStatusError; + else + image = self->imageStatusInactive; + + [self->statusItem performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; + } +} + + +#pragma mark - Delegates + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + DDLogVerbose(@"\n******************************\n** XcodeCapp started **\n******************************\n"); + + self.version = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]; + + [self _initUserDefaults]; + [self _initLogging]; + [self _initOperationQueue]; + [self _initStatusItem]; + + [self _startObservers]; + + [self->_mainWindowController windowDidLoad]; +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app +{ + DDLogVerbose(@"Stop listening to all projects"); + [self.mainWindowController notifyCappuccinoControllersApplicationIsClosing]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + return NSTerminateNow; +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification +{ + DDLogVerbose(@"\n******************************\n** XcodeCapp stopped **\n******************************\n"); +} + +- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag +{ + [self.mainWindowController showWindow:self]; + return YES; +} + +- (BOOL)application:(NSApplication *)application openFile:(NSString *)filename +{ + BOOL isDir; + + [[NSFileManager defaultManager] fileExistsAtPath:filename isDirectory:&isDir]; + + if (isDir) + { + [self.mainWindowController manageCappuccinoProjectControllerForPath:filename]; + return YES; + } + else + { + return NO; + } +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/Base.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/Base.lproj/MainMenu.xib new file mode 100644 index 000000000..d48ec49ea --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Base.lproj/MainMenu.xib @@ -0,0 +1,1062 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This represents the number of operations XcodeCapp can do in parallel. Decrease the this value if you encounter slugginesh or over CPU usage. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/XcodeCapp/XcodeCapp/Debug.xcconfig b/Tools/XcodeCapp/XcodeCapp/Debug.xcconfig index 9ec35ffbf..9c74d6764 100644 --- a/Tools/XcodeCapp/XcodeCapp/Debug.xcconfig +++ b/Tools/XcodeCapp/XcodeCapp/Debug.xcconfig @@ -13,7 +13,7 @@ ONLY_ACTIVE_ARCH = YES DEBUG_INFORMATION_FORMAT = dwarf-with-dsym COMBINE_HIDPI_IMAGES = YES INSTALL_PATH = $(LOCAL_APPS_DIR) -MACOSX_DEPLOYMENT_TARGET = 10.6.8 +MACOSX_DEPLOYMENT_TARGET = 10.10 COPY_PHASE_STRIP = NO INFOPLIST_FILE = XcodeCapp/Info.plist PRODUCT_NAME = XcodeCapp diff --git a/Tools/XcodeCapp/XcodeCapp/ErrorsView.xib b/Tools/XcodeCapp/XcodeCapp/ErrorsView.xib new file mode 100644 index 000000000..df069a1ce --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/ErrorsView.xib @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/XcodeCapp/XcodeCapp/FindSourceFilesOperation.h b/Tools/XcodeCapp/XcodeCapp/FindSourceFilesOperation.h deleted file mode 100644 index ce4d5eb04..000000000 --- a/Tools/XcodeCapp/XcodeCapp/FindSourceFilesOperation.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FindSourceFilesOperation.h -// XcodeCapp -// -// Created by Aparajita on 4/27/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#import - -@class XcodeCapp; - - -extern NSString * const XCCNeedSourceToProjectPathMappingNotification; - - -@interface FindSourceFilesOperation : NSOperation - -- (id)initWithXCC:(XcodeCapp *)xcc projectId:(NSNumber *)projectId path:(NSString *)path; - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/FindSourceFilesOperation.m b/Tools/XcodeCapp/XcodeCapp/FindSourceFilesOperation.m deleted file mode 100644 index aa44e4c58..000000000 --- a/Tools/XcodeCapp/XcodeCapp/FindSourceFilesOperation.m +++ /dev/null @@ -1,172 +0,0 @@ -// -// FindSourceFilesOperation.m -// XcodeCapp -// -// Created by Aparajita on 4/27/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#import "FindSourceFilesOperation.h" -#import "ProcessSourceOperation.h" -#import "XcodeCapp.h" - -NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSourceToProjectPathMappingNotification"; - - -@interface FindSourceFilesOperation () - -@property XcodeCapp *xcc; -@property NSNumber *projectId; -@property NSString *projectPathToSearch; -@property NSString *projectPath; - -@end - - -@implementation FindSourceFilesOperation - -- (id)initWithXCC:(XcodeCapp *)xcc projectId:(NSNumber *)projectId path:(NSString *)path -{ - self = [super init]; - - if (self) - { - self.xcc = xcc; - self.projectId = projectId; - self.projectPathToSearch = path; - self.projectPath = xcc.projectPath; - } - - return self; -} - -- (void)main -{ - [self findSourceFilesAtProjectPath:self.projectPathToSearch]; -} - -- (void)findSourceFilesAtProjectPath:(NSString *)aProjectPath -{ - if (self.isCancelled) - return; - - DDLogVerbose(@"-->findSourceFiles: %@", aProjectPath); - - NSError *error = NULL; - NSString *projectPath = [self.projectPath stringByAppendingPathComponent:aProjectPath]; - NSFileManager *fm = [NSFileManager defaultManager]; - - NSArray *urls = [fm contentsOfDirectoryAtURL:[NSURL fileURLWithPath:projectPath.stringByResolvingSymlinksInPath] - includingPropertiesForKeys:@[NSURLIsDirectoryKey, NSURLIsSymbolicLinkKey] - options:NSDirectoryEnumerationSkipsHiddenFiles | NSDirectoryEnumerationSkipsPackageDescendants | NSDirectoryEnumerationSkipsSubdirectoryDescendants - error:&error]; - - if (!urls) - return; - - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - - for (NSURL *url in urls) - { - if (self.isCancelled) - return; - - NSString *filename = url.lastPathComponent; - - NSString *projectRelativePath = [aProjectPath stringByAppendingPathComponent:filename]; - NSString *realPath = url.path; - NSURL *resolvedURL = url; - - NSNumber *isDirectory, *isSymlink; - [url getResourceValue:&isSymlink forKey:NSURLIsSymbolicLinkKey error:nil]; - - if (isSymlink.boolValue == YES) - { - resolvedURL = [url URLByResolvingSymlinksInPath]; - - if ([resolvedURL checkResourceIsReachableAndReturnError:nil]) - { - filename = resolvedURL.lastPathComponent; - realPath = resolvedURL.path; - } - else - continue; - } - - [resolvedURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil]; - - if (isDirectory.boolValue == YES) - { - if ([self.xcc shouldIgnoreDirectoryNamed:filename]) - { - DDLogVerbose(@"ignored symlinked directory: %@", projectRelativePath); - continue; - } - - // If the resolved path is not within the project directory and is not ignored, add a mapping to it - // so we can map the resolved path back to the project directory later. - if (isSymlink.boolValue == YES) - { - NSString *fullProjectPath = [self.projectPath stringByAppendingPathComponent:projectRelativePath]; - - if (![realPath hasPrefix:fullProjectPath] && ![self.xcc pathMatchesIgnoredPaths:fullProjectPath]) - { - DDLogVerbose(@"symlinked directory: %@ -> %@", projectRelativePath, realPath); - - NSDictionary *info = - @{ - @"projectId":self.projectId, - @"sourcePath":realPath, - @"projectPath":fullProjectPath - }; - - if (self.isCancelled) - return; - - [center postNotificationName:XCCNeedSourceToProjectPathMappingNotification object:self userInfo:info]; - } - else - DDLogVerbose(@"ignored symlinked directory: %@", projectRelativePath); - } - - [self findSourceFilesAtProjectPath:projectRelativePath]; - continue; - } - - if (self.isCancelled) - return; - - if ([self.xcc pathMatchesIgnoredPaths:realPath]) - continue; - - NSString *projectSourcePath = [self.projectPath stringByAppendingPathComponent:projectRelativePath]; - - if ([self.xcc isObjjFile:filename] || [self.xcc isXibFile:filename]) - { - NSString *processedPath; - - if ([self.xcc isObjjFile:filename]) - processedPath = [[self.xcc shadowBasePathForProjectSourcePath:projectSourcePath] stringByAppendingPathExtension:@"h"]; - else - processedPath = [projectSourcePath.stringByDeletingPathExtension stringByAppendingPathExtension:@"cib"]; - - if (![fm fileExistsAtPath:processedPath]) - [self createProcessingOperationForProjectSourcePath:projectSourcePath]; - } - } - - DDLogVerbose(@"<--findSourceFiles: %@", aProjectPath); -} - -- (void)createProcessingOperationForProjectSourcePath:(NSString *)projectSourcePath -{ - if (self.isCancelled) - return; - - ProcessSourceOperation *op = [[ProcessSourceOperation alloc] initWithXCC:self.xcc - projectId:self.projectId - sourcePath:projectSourcePath]; - [[NSOperationQueue currentQueue] addOperation:op]; -} - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/Growl Registration Ticket.growlRegDict b/Tools/XcodeCapp/XcodeCapp/Growl Registration Ticket.growlRegDict deleted file mode 100644 index 01a301463..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl Registration Ticket.growlRegDict +++ /dev/null @@ -1,12 +0,0 @@ - - - - - TicketVersion - 1 - AllNotifications - - DefaultNotifications - - - diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Growl b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Growl deleted file mode 120000 index 85956e2d2..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Growl +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Growl \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Headers b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Headers deleted file mode 120000 index a177d2a6b..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Resources b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Resources deleted file mode 120000 index 953ee36f3..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Growl b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Growl deleted file mode 100755 index e35673015..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Growl and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/Growl.h b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/Growl.h deleted file mode 100644 index 7b1a3247d..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/Growl.h +++ /dev/null @@ -1,5 +0,0 @@ -#include - -#ifdef __OBJC__ -# include -#endif diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h deleted file mode 100644 index 363975762..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h +++ /dev/null @@ -1,567 +0,0 @@ -// -// GrowlApplicationBridge.h -// Growl -// -// Created by Evan Schoenberg on Wed Jun 16 2004. -// Copyright 2004-2006 The Growl Project. All rights reserved. -// - -/*! - * @header GrowlApplicationBridge.h - * @abstract Defines the GrowlApplicationBridge class. - * @discussion This header defines the GrowlApplicationBridge class as well as - * the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant. - */ - -#ifndef __GrowlApplicationBridge_h__ -#define __GrowlApplicationBridge_h__ - -#import -#import -#import - -//Forward declarations -@protocol GrowlApplicationBridgeDelegate; - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @class GrowlApplicationBridge - * @abstract A class used to interface with Growl. - * @discussion This class provides a means to interface with Growl. - * - * Currently it provides a way to detect if Growl is installed and launch the - * GrowlHelperApp if it's not already running. - */ -@interface GrowlApplicationBridge : NSObject { - -} - -/*! - * @method isGrowlInstalled - * @abstract Detects whether Growl is installed. - * @discussion Determines if the Growl prefpane and its helper app are installed. - * @result this method will forever return YES. - */ -+ (BOOL) isGrowlInstalled __attribute__((deprecated)); - -/*! - * @method isGrowlRunning - * @abstract Detects whether GrowlHelperApp is currently running. - * @discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings. - * @result Returns YES if GrowlHelperApp is running, NO otherwise. - */ -+ (BOOL) isGrowlRunning; - - -/*! - * @method isMistEnabled - * @abstract Gives the caller a fairly good indication of whether or not built-in notifications(Mist) will be used. - * @discussion since this call makes use of isGrowlRunning it is entirely possible for this value to change between call and - * executing a notification dispatch - * @result Returns YES if Growl isn't reachable and the developer has not opted-out of - * Mist and the user hasn't set the global mist enable key to false. - */ -+ (BOOL)isMistEnabled; - -/*! - * @method setShouldUseBuiltInNotifications - * @abstract opt-out mechanism for the mist notification style in the event growl can't be reached. - * @discussion if growl is unavailable due to not being installed or as a result of being turned off then - * this option can enable/disable a built-in fire and forget display style - * @param should Specifies whether or not the developer wants to opt-in (default) or opt out - * of the built-in Mist style in the event Growl is unreachable. - */ -+ (void)setShouldUseBuiltInNotifications:(BOOL)should; - -/*! - * @method shouldUseBuiltInNotifications - * @abstract returns the current opt-in state of the framework's use of the Mist display style. - * @result Returns NO if the developer opt-ed out of Mist, the default value is YES. - */ -+ (BOOL)shouldUseBuiltInNotifications; - -#pragma mark - - -/*! - * @method setGrowlDelegate: - * @abstract Set the object which will be responsible for providing and receiving Growl information. - * @discussion This must be called before using GrowlApplicationBridge. - * - * The methods in the GrowlApplicationBridgeDelegate protocol are required - * and return the basic information needed to register with Growl. - * - * The methods in the GrowlApplicationBridgeDelegate_InformalProtocol - * informal protocol are individually optional. They provide a greater - * degree of interaction between the application and growl such as informing - * the application when one of its Growl notifications is clicked by the user. - * - * The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol - * informal protocol are individually optional and are only applicable when - * using the Growl-WithInstaller.framework which allows for automated Growl - * installation. - * - * When this method is called, data will be collected from inDelegate, Growl - * will be launched if it is not already running, and the application will be - * registered with Growl. - * - * If using the Growl-WithInstaller framework, if Growl is already installed - * but this copy of the framework has an updated version of Growl, the user - * will be prompted to update automatically. - * - * @param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol. - */ -+ (void) setGrowlDelegate:(id)inDelegate; - -/*! - * @method growlDelegate - * @abstract Return the object responsible for providing and receiving Growl information. - * @discussion See setGrowlDelegate: for details. - * @result The Growl delegate. - */ -+ (id) growlDelegate; - -#pragma mark - - -/*! - * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext: - * @abstract Send a Growl notification. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * nil (or 0 or NO as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. If the user cancels, this method - * will have no effect until the next application session, at which time when - * it is called the user will be prompted again. The user is also given the - * option to not be prompted again. If the user does choose to install Growl, - * the requested notification will be displayed once Growl is installed and - * running. - * - * @param title The title of the notification displayed to the user. - * @param description The full description of the notification displayed to the user. - * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane. - * @param iconData NSData object to show with the notification as its icon. If nil, the application's icon will be used instead. - * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority. - * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications. - * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of NSString, NSArray, NSNumber, NSDictionary, and NSData types). - */ -+ (void) notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - iconData:(NSData *)iconData - priority:(signed int)priority - isSticky:(BOOL)isSticky - clickContext:(id)clickContext; - -/*! - * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier: - * @abstract Send a Growl notification. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * nil (or 0 or NO as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. If the user cancels, this method - * will have no effect until the next application session, at which time when - * it is called the user will be prompted again. The user is also given the - * option to not be prompted again. If the user does choose to install Growl, - * the requested notification will be displayed once Growl is installed and - * running. - * - * @param title The title of the notification displayed to the user. - * @param description The full description of the notification displayed to the user. - * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane. - * @param iconData NSData object to show with the notification as its icon. If nil, the application's icon will be used instead. - * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority. - * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications. - * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of NSString, NSArray, NSNumber, NSDictionary, and NSData types). - * @param identifier An identifier for this notification. Notifications with equal identifiers are coalesced. - */ -+ (void) notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - iconData:(NSData *)iconData - priority:(signed int)priority - isSticky:(BOOL)isSticky - clickContext:(id)clickContext - identifier:(NSString *)identifier; - -/*! @method notifyWithDictionary: - * @abstract Notifies using a userInfo dictionary suitable for passing to - * NSDistributedNotificationCenter. - * @param userInfo The dictionary to notify with. - * @discussion Before Growl 0.6, your application would have posted - * notifications using NSDistributedNotificationCenter by - * creating a userInfo dictionary with the notification data. This had the - * advantage of allowing you to add other data to the dictionary for programs - * besides Growl that might be listening. - * - * This method allows you to use such dictionaries without being restricted - * to using NSDistributedNotificationCenter. The keys for this dictionary - * can be found in GrowlDefines.h. - */ -+ (void) notifyWithDictionary:(NSDictionary *)userInfo; - -#pragma mark - - -/*! @method registerWithDictionary: - * @abstract Register your application with Growl without setting a delegate. - * @discussion When you call this method with a dictionary, - * GrowlApplicationBridge registers your application using that dictionary. - * If you pass nil, GrowlApplicationBridge will ask the delegate - * (if there is one) for a dictionary, and if that doesn't work, it will look - * in your application's bundle for an auto-discoverable plist. - * (XXX refer to more information on that) - * - * If you pass a dictionary to this method, it must include the - * GROWL_APP_NAME key, unless a delegate is set. - * - * This method is mainly an alternative to the delegate system introduced - * with Growl 0.6. Without a delegate, you cannot receive callbacks such as - * -growlIsReady (since they are sent to the delegate). You can, - * however, set a delegate after registering without one. - * - * This method was introduced in Growl.framework 0.7. - */ -+ (BOOL) registerWithDictionary:(NSDictionary *)regDict; - -/*! @method reregisterGrowlNotifications - * @abstract Reregister the notifications for this application. - * @discussion This method does not normally need to be called. If your - * application changes what notifications it is registering with Growl, call - * this method to have the Growl delegate's - * -registrationDictionaryForGrowl method called again and the - * Growl registration information updated. - * - * This method is now implemented using -registerWithDictionary:. - */ -+ (void) reregisterGrowlNotifications; - -#pragma mark - - -/*! @method setWillRegisterWhenGrowlIsReady: - * @abstract Tells GrowlApplicationBridge to register with Growl when Growl - * launches (or not). - * @discussion When Growl has started listening for notifications, it posts a - * GROWL_IS_READY notification on the Distributed Notification - * Center. GrowlApplicationBridge listens for this notification, using it to - * perform various tasks (such as calling your delegate's - * -growlIsReady method, if it has one). If this method is - * called with YES, one of those tasks will be to reregister - * with Growl (in the manner of -reregisterGrowlNotifications). - * - * This attribute is automatically set back to NO (the default) - * after every GROWL_IS_READY notification. - * @param flag YES if you want GrowlApplicationBridge to register with - * Growl when next it is ready; NO if not. - */ -+ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag; - -/*! @method willRegisterWhenGrowlIsReady - * @abstract Reports whether GrowlApplicationBridge will register with Growl - * when Growl next launches. - * @result YES if GrowlApplicationBridge will register with Growl - * when next it posts GROWL_IS_READY; NO if not. - */ -+ (BOOL) willRegisterWhenGrowlIsReady; - -#pragma mark - - -/*! @method registrationDictionaryFromDelegate - * @abstract Asks the delegate for a registration dictionary. - * @discussion If no delegate is set, or if the delegate's - * -registrationDictionaryForGrowl method returns - * nil, this method returns nil. - * - * This method does not attempt to clean up the dictionary in any way - for - * example, if it is missing the GROWL_APP_NAME key, the result - * will be missing it too. Use +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:] or - * +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:restrictToKeys:] to try - * to fill in missing keys. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) registrationDictionaryFromDelegate; - -/*! @method registrationDictionaryFromBundle: - * @abstract Looks in a bundle for a registration dictionary. - * @discussion This method looks in a bundle for an auto-discoverable - * registration dictionary file using -[NSBundle - * pathForResource:ofType:]. If it finds one, it loads the file using - * +[NSDictionary dictionaryWithContentsOfFile:] and returns the - * result. - * - * If you pass nil as the bundle, the main bundle is examined. - * - * This method does not attempt to clean up the dictionary in any way - for - * example, if it is missing the GROWL_APP_NAME key, the result - * will be missing it too. Use +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:] or - * +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:restrictToKeys:] to try - * to fill in missing keys. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle; - -/*! @method bestRegistrationDictionary - * @abstract Obtains a registration dictionary, filled out to the best of - * GrowlApplicationBridge's knowledge. - * @discussion This method creates a registration dictionary as best - * GrowlApplicationBridge knows how. - * - * First, GrowlApplicationBridge contacts the Growl delegate (if there is - * one) and gets the registration dictionary from that. If no such dictionary - * was obtained, GrowlApplicationBridge looks in your application's main - * bundle for an auto-discoverable registration dictionary file. If that - * doesn't exist either, this method returns nil. - * - * Second, GrowlApplicationBridge calls - * +registrationDictionaryByFillingInDictionary: with whatever - * dictionary was obtained. The result of that method is the result of this - * method. - * - * GrowlApplicationBridge uses this method when you call - * +setGrowlDelegate:, or when you call - * +registerWithDictionary: with nil. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) bestRegistrationDictionary; - -#pragma mark - - -/*! @method registrationDictionaryByFillingInDictionary: - * @abstract Tries to fill in missing keys in a registration dictionary. - * @discussion This method examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * GROWL_APP_NAME CFBundleExecutableName - * GROWL_APP_ICON_DATA The data of the icon of the application. - * GROWL_APP_LOCATION The location of the application. - * GROWL_NOTIFICATIONS_DEFAULT GROWL_NOTIFICATIONS_ALL - * - * Keys are only filled in if missing; if a key is present in the dictionary, - * its value will not be changed. - * - * This method was introduced in Growl.framework 0.7. - * @param regDict The dictionary to fill in. - * @result The dictionary with the keys filled in. This is an autoreleased - * copy of regDict. - */ -+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict; - -/*! @method registrationDictionaryByFillingInDictionary:restrictToKeys: - * @abstract Tries to fill in missing keys in a registration dictionary. - * @discussion This method examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * GROWL_APP_NAME CFBundleExecutableName - * GROWL_APP_ICON_DATA The data of the icon of the application. - * GROWL_APP_LOCATION The location of the application. - * GROWL_NOTIFICATIONS_DEFAULT GROWL_NOTIFICATIONS_ALL - * - * Only those keys that are listed in keys will be filled in. - * Other missing keys are ignored. Also, keys are only filled in if missing; - * if a key is present in the dictionary, its value will not be changed. - * - * This method was introduced in Growl.framework 0.7. - * @param regDict The dictionary to fill in. - * @param keys The keys to fill in. If nil, any missing keys are filled in. - * @result The dictionary with the keys filled in. This is an autoreleased - * copy of regDict. - */ -+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys; - -/*! @brief Tries to fill in missing keys in a notification dictionary. - * @param notifDict The dictionary to fill in. - * @return The dictionary with the keys filled in. This will be a separate instance from \a notifDict. - * @discussion This function examines the \a notifDict for missing keys, and - * tries to get them from the last known registration dictionary. As of 1.1, - * the keys that it will look for are: - * - * \li GROWL_APP_NAME - * \li GROWL_APP_ICON_DATA - * - * @since Growl.framework 1.1 - */ -+ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict; - -+ (NSDictionary *) frameworkInfoDictionary; - -#pragma mark - - -/*! - *@method growlURLSchemeAvailable - *@abstract Lets the app know whether growl:// is registered on the system, used for certain methods below this - *@return Returns whether growl:// is registered on the system - *@discussion Methods such as openGrowlPreferences rely on the growl:// URL scheme to function - * Further, this method can provide a check on whether Growl is installed, - * however, the framework will not be relying on this method for choosing when/how to notify, - * and it is not recommended that the app rely on it for other than whether to use growl:// methods - *@since Growl.framework 1.4 - */ -+ (BOOL) isGrowlURLSchemeAvailable; - -/*! - * @method openGrowlPreferences: - * @abstract Open Growl preferences, optionally to this app's settings, growl:// method - * @param showApp Whether to show the application's settings, otherwise just opens to the last position - * @return Return's whether opening the URL was succesfull or not. - * @discussion Will launch if Growl is installed, but not running, and open the preferences window - * Uses growl:// URL scheme - * @since Growl.framework 1.4 - */ -+ (BOOL) openGrowlPreferences:(BOOL)showApp; - -@end - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @protocol GrowlApplicationBridgeDelegate - * @abstract Required protocol for the Growl delegate. - * @discussion The methods in this protocol are optional and are called - * automatically as needed by GrowlApplicationBridge. See - * +[GrowlApplicationBridge setGrowlDelegate:]. - * See also GrowlApplicationBridgeDelegate_InformalProtocol. - */ - -@protocol GrowlApplicationBridgeDelegate - -@optional - -/*! - * @method registrationDictionaryForGrowl - * @abstract Return the dictionary used to register this application with Growl. - * @discussion The returned dictionary gives Growl the complete list of - * notifications this application will ever send, and it also specifies which - * notifications should be enabled by default. Each is specified by an array - * of NSString objects. - * - * For most applications, these two arrays can be the same (if all sent - * notifications should be displayed by default). - * - * The NSString objects of these arrays will correspond to the - * notificationName: parameter passed in - * +[GrowlApplicationBridge - * notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:] calls. - * - * The dictionary should have the required key object pairs: - * key: GROWL_NOTIFICATIONS_ALL object: NSArray of NSString objects - * key: GROWL_NOTIFICATIONS_DEFAULT object: NSArray of NSString objects - * - * The dictionary may have the following key object pairs: - * key: GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES object: NSDictionary of key: notification name object: human-readable notification name - * - * You do not need to implement this method if you have an auto-discoverable - * plist file in your app bundle. (XXX refer to more information on that) - * - * @result The NSDictionary to use for registration. - */ -- (NSDictionary *) registrationDictionaryForGrowl; - -/*! - * @method applicationNameForGrowl - * @abstract Return the name of this application which will be used for Growl bookkeeping. - * @discussion This name is used both internally and in the Growl preferences. - * - * This should remain stable between different versions and incarnations of - * your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - * - * You do not need to implement this method if you are providing the - * application name elsewhere, meaning in an auto-discoverable plist file in - * your app bundle (XXX refer to more information on that) or in the result - * of -registrationDictionaryForGrowl. - * - * @result The name of the application using Growl. - */ -- (NSString *) applicationNameForGrowl; - -/*! - * @method applicationIconForGrowl - * @abstract Return the NSImage to treat as the application icon. - * @discussion The delegate may optionally return an NSImage - * object to use as the application icon. If this method is not implemented, - * {{{-applicationIconDataForGrowl}}} is tried. If that method is not - * implemented, the application's own icon is used. Neither method is - * generally needed. - * @result The NSImage to treat as the application icon. - */ -- (NSImage *) applicationIconForGrowl; - -/*! - * @method applicationIconDataForGrowl - * @abstract Return the NSData to treat as the application icon. - * @discussion The delegate may optionally return an NSData - * object to use as the application icon; if this is not implemented, the - * application's own icon is used. This is not generally needed. - * @result The NSData to treat as the application icon. - * @deprecated In version 1.1, in favor of {{{-applicationIconForGrowl}}}. - */ -- (NSData *) applicationIconDataForGrowl; - -/*! - * @method growlIsReady - * @abstract Informs the delegate that Growl has launched. - * @discussion Informs the delegate that Growl (specifically, the - * GrowlHelperApp) was launched successfully. The application can take actions - * with the knowledge that Growl is installed and functional. - */ -- (void) growlIsReady; - -/*! - * @method growlNotificationWasClicked: - * @abstract Informs the delegate that a Growl notification was clicked. - * @discussion Informs the delegate that a Growl notification was clicked. It - * is only sent for notifications sent with a non-nil - * clickContext, so if you want to receive a message when a notification is - * clicked, clickContext must not be nil when calling - * +[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]. - * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]. - */ -- (void) growlNotificationWasClicked:(id)clickContext; - -/*! - * @method growlNotificationTimedOut: - * @abstract Informs the delegate that a Growl notification timed out. - * @discussion Informs the delegate that a Growl notification timed out. It - * is only sent for notifications sent with a non-nil - * clickContext, so if you want to receive a message when a notification is - * clicked, clickContext must not be nil when calling - * +[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]. - * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]. - */ -- (void) growlNotificationTimedOut:(id)clickContext; - - -/*! - * @method hasNetworkClientEntitlement - * @abstract Used only in sandboxed situations since we don't know whether the app has com.apple.security.network.client entitlement - * @discussion GrowlDelegate calls to find out if we have the com.apple.security.network.client entitlement, - * since we can't find this out without hitting the sandbox. We only call it if we detect that the application is sandboxed. - */ -- (BOOL) hasNetworkClientEntitlement; - -@end - -#pragma mark - - -#endif /* __GrowlApplicationBridge_h__ */ diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/GrowlDefines.h b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/GrowlDefines.h deleted file mode 100644 index 0a196f1e3..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Headers/GrowlDefines.h +++ /dev/null @@ -1,386 +0,0 @@ -// -// GrowlDefines.h -// - -#ifndef _GROWLDEFINES_H -#define _GROWLDEFINES_H - -#ifdef __OBJC__ -#define XSTR(x) (@x) -#else -#define XSTR CFSTR -#endif - -/*! @header GrowlDefines.h - * @abstract Defines all the notification keys. - * @discussion Defines all the keys used for registration with Growl and for - * Growl notifications. - * - * Most applications should use the functions or methods of Growl.framework - * instead of posting notifications such as those described here. - * @updated 2004-01-25 - */ - -// UserInfo Keys for Registration -#pragma mark UserInfo Keys for Registration - -/*! @group Registration userInfo keys */ -/* @abstract Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification. - * @discussion The values of these keys describe the application and the - * notifications it may post. - * - * Your application must register with Growl before it can post Growl - * notifications (and have them not be ignored). However, as of Growl 0.6, - * posting GROWL_APP_REGISTRATION notifications directly is no longer the - * preferred way to register your application. Your application should instead - * use Growl.framework's delegate system. - * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for - * more information. - */ - -/*! @defined GROWL_APP_NAME - * @abstract The name of your application. - * @discussion The name of your application. This should remain stable between - * different versions and incarnations of your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - */ -#define GROWL_APP_NAME XSTR("ApplicationName") -/*! @defined GROWL_APP_ID - * @abstract The bundle identifier of your application. - * @discussion The bundle identifier of your application. This key should - * be unique for your application while there may be several applications - * with the same GROWL_APP_NAME. - * This key is optional. - */ -#define GROWL_APP_ID XSTR("ApplicationId") -/*! @defined GROWL_APP_ICON_DATA - * @abstract The image data for your application's icon. - * @discussion Image data representing your application's icon. This may be - * superimposed on a notification icon as a badge, used as the notification - * icon when a notification-specific icon is not supplied, or ignored - * altogether, depending on the display. Must be in a format supported by - * NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_APP_ICON_DATA XSTR("ApplicationIcon") -/*! @defined GROWL_NOTIFICATIONS_DEFAULT - * @abstract The array of notifications to turn on by default. - * @discussion These are the names of the notifications that should be enabled - * by default when your application registers for the first time. If your - * application reregisters, Growl will look here for any new notification - * names found in GROWL_NOTIFICATIONS_ALL, but ignore any others. - */ -#define GROWL_NOTIFICATIONS_DEFAULT XSTR("DefaultNotifications") -/*! @defined GROWL_NOTIFICATIONS_ALL - * @abstract The array of all notifications your application can send. - * @discussion These are the names of all of the notifications that your - * application may post. See GROWL_NOTIFICATION_NAME for a discussion of good - * notification names. - */ -#define GROWL_NOTIFICATIONS_ALL XSTR("AllNotifications") -/*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS - * @abstract A dictionary of human-readable names for your notifications. - * @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL - * which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display. - * The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions. - * For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed. - * - * This key is optional. - */ -#define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES XSTR("HumanReadableNames") -/*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS -* @abstract A dictionary of descriptions of _when_ each notification occurs -* @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are -* descriptions of _when_ each notification occurs, such as "You received a new mail message" or -* "A file finished downloading". -* -* This key is optional. -*/ -#define GROWL_NOTIFICATIONS_DESCRIPTIONS XSTR("NotificationDescriptions") -/*! @defined GROWL_NOTIFICATIONS_ICONS - * @abstract A dictionary of icons for each notification - * @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are - * icons for each notification, for GNTP spec - * - * This key is optional. - */ -#define GROWL_NOTIFICATIONS_ICONS XSTR("NotificationIcons") - -/*! @defined GROWL_TICKET_VERSION - * @abstract The version of your registration ticket. - * @discussion Include this key in a ticket plist file that you put in your - * application bundle for auto-discovery. The current ticket version is 1. - */ -#define GROWL_TICKET_VERSION XSTR("TicketVersion") -// UserInfo Keys for Notifications -#pragma mark UserInfo Keys for Notifications - -/*! @group Notification userInfo keys */ -/* @abstract Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification. - * @discussion The values of these keys describe the content of a Growl - * notification. - * - * Not all of these keys are supported by all displays. Only the name, title, - * and description of a notification are universal. Most of the built-in - * displays do support all of these keys, and most other visual displays - * probably will also. But, as of 0.6, the Log, MailMe, and Speech displays - * support only textual data. - */ - -/*! @defined GROWL_NOTIFICATION_NAME - * @abstract The name of the notification. - * @discussion The name of the notification. Note that if you do not define - * GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name - * will the one displayed within the Growl preference pane and should be human-readable. - */ -#define GROWL_NOTIFICATION_NAME XSTR("NotificationName") -/*! @defined GROWL_NOTIFICATION_TITLE - * @abstract The title to display in the notification. - * @discussion The title of the notification. Should be very brief. - * The title usually says what happened, e.g. "Download complete". - */ -#define GROWL_NOTIFICATION_TITLE XSTR("NotificationTitle") -/*! @defined GROWL_NOTIFICATION_DESCRIPTION - * @abstract The description to display in the notification. - * @discussion The description should be longer and more verbose than the title. - * The description usually tells the subject of the action, - * e.g. "Growl-0.6.dmg downloaded in 5.02 minutes". - */ -#define GROWL_NOTIFICATION_DESCRIPTION XSTR("NotificationDescription") -/*! @defined GROWL_NOTIFICATION_ICON - * @discussion Image data for the notification icon. Image data must be in a format - * supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_ICON_DATA XSTR("NotificationIcon") -/*! @defined GROWL_NOTIFICATION_APP_ICON - * @discussion Image data for the application icon, in case GROWL_APP_ICON does - * not apply for some reason. Image data be in a format supported by NSImage, such - * as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_APP_ICON_DATA XSTR("NotificationAppIcon") -/*! @defined GROWL_NOTIFICATION_PRIORITY - * @discussion The priority of the notification as an integer number from - * -2 to +2 (+2 being highest). - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_PRIORITY XSTR("NotificationPriority") -/*! @defined GROWL_NOTIFICATION_STICKY - * @discussion A Boolean number controlling whether the notification is sticky. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_STICKY XSTR("NotificationSticky") -/*! @defined GROWL_NOTIFICATION_CLICK_CONTEXT - * @abstract Identifies which notification was clicked. - * @discussion An identifier for the notification for clicking purposes. - * - * This will be passed back to the application when the notification is - * clicked. It must be plist-encodable (a data, dictionary, array, number, or - * string object), and it should be unique for each notification you post. - * A good click context would be a UUID string returned by NSProcessInfo or - * CFUUID. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_CLICK_CONTEXT XSTR("NotificationClickContext") - -/*! @defined GROWL_NOTIFICATION_IDENTIFIER - * @abstract An identifier for the notification for coalescing purposes. - * Notifications with the same identifier fall into the same class; only - * the last notification of a class is displayed on the screen. If a - * notification of the same class is currently being displayed, it is - * replaced by this notification. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_IDENTIFIER XSTR("GrowlNotificationIdentifier") - -/*! @defined GROWL_APP_PID - * @abstract The process identifier of the process which sends this - * notification. If this field is set, the application will only receive - * clicked and timed out notifications which originate from this process. - * - * Optional. - */ -#define GROWL_APP_PID XSTR("ApplicationPID") - -/*! @defined GROWL_NOTIFICATION_PROGRESS -* @abstract If this key is set, it should contain a double value wrapped -* in a NSNumber which describes some sort of progress (from 0.0 to 100.0). -* If this is key is not set, no progress bar is shown. -* -* Optional. Not supported by all display plugins. -*/ -#define GROWL_NOTIFICATION_PROGRESS XSTR("NotificationProgress") - -/*! @defined GROWL_NOTIFICATION_ALREADY_SHOWN - * @abstract If this key is set, it should contain a bool value wrapped - * in a NSNumber which describes whether the notification has - * already been displayed, for instance by built in Notification - * Center support. This value can be used to allow display - * plugins to skip a notification, while still allowing Growl - * actions to run on them. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_ALREADY_SHOWN XSTR("AlreadyShown") - - -// Notifications -#pragma mark Notifications - -/*! @group Notification names */ -/* @abstract Names of distributed notifications used by Growl. - * @discussion These are notifications used by applications (directly or - * indirectly) to interact with Growl, and by Growl for interaction between - * its components. - * - * Most of these should no longer be used in Growl 0.6 and later, in favor of - * Growl.framework's GrowlApplicationBridge APIs. - */ - -/*! @defined GROWL_APP_REGISTRATION - * @abstract The distributed notification for registering your application. - * @discussion This is the name of the distributed notification that can be - * used to register applications with Growl. - * - * The userInfo dictionary for this notification can contain these keys: - *
    - *
  • GROWL_APP_NAME
  • - *
  • GROWL_APP_ICON_DATA
  • - *
  • GROWL_NOTIFICATIONS_ALL
  • - *
  • GROWL_NOTIFICATIONS_DEFAULT
  • - *
- * - * No longer recommended as of Growl 0.6. An alternate method of registering - * is to use Growl.framework's delegate system. - * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for - * more information. - */ -#define GROWL_APP_REGISTRATION XSTR("GrowlApplicationRegistrationNotification") -/*! @defined GROWL_APP_REGISTRATION_CONF - * @abstract The distributed notification for confirming registration. - * @discussion The name of the distributed notification sent to confirm the - * registration. Used by the Growl preference pane. Your application probably - * does not need to use this notification. - */ -#define GROWL_APP_REGISTRATION_CONF XSTR("GrowlApplicationRegistrationConfirmationNotification") -/*! @defined GROWL_NOTIFICATION - * @abstract The distributed notification for Growl notifications. - * @discussion This is what it all comes down to. This is the name of the - * distributed notification that your application posts to actually send a - * Growl notification. - * - * The userInfo dictionary for this notification can contain these keys: - *
    - *
  • GROWL_NOTIFICATION_NAME (required)
  • - *
  • GROWL_NOTIFICATION_TITLE (required)
  • - *
  • GROWL_NOTIFICATION_DESCRIPTION (required)
  • - *
  • GROWL_NOTIFICATION_ICON
  • - *
  • GROWL_NOTIFICATION_APP_ICON
  • - *
  • GROWL_NOTIFICATION_PRIORITY
  • - *
  • GROWL_NOTIFICATION_STICKY
  • - *
  • GROWL_NOTIFICATION_CLICK_CONTEXT
  • - *
  • GROWL_APP_NAME (required)
  • - *
- * - * No longer recommended as of Growl 0.6. Three alternate methods of posting - * notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:], - * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and - * Growl_PostNotification. - */ -#define GROWL_NOTIFICATION XSTR("GrowlNotification") -/*! @defined GROWL_PING - * @abstract A distributed notification to check whether Growl is running. - * @discussion This is used by the Growl preference pane. If it receives a - * GROWL_PONG, the preference pane takes this to mean that Growl is running. - */ -#define GROWL_PING XSTR("Honey, Mind Taking Out The Trash") -/*! @defined GROWL_PONG - * @abstract The distributed notification sent in reply to GROWL_PING. - * @discussion GrowlHelperApp posts this in reply to GROWL_PING. - */ -#define GROWL_PONG XSTR("What Do You Want From Me, Woman") -/*! @defined GROWL_IS_READY - * @abstract The distributed notification sent when Growl starts up. - * @discussion GrowlHelperApp posts this when it has begin listening on all of - * its sources for new notifications. GrowlApplicationBridge (in - * Growl.framework), upon receiving this notification, reregisters using the - * registration dictionary supplied by its delegate. - */ -#define GROWL_IS_READY XSTR("Lend Me Some Sugar; I Am Your Neighbor!") - - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX - * @abstract Part of the name of the distributed notification sent when a supported notification is clicked. - * @discussion When a Growl notification with a click context is clicked on by - * the user, Growl posts a distributed notification whose name is in the format: - * [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX] - * The GrowlApplicationBridge responds to this notification by calling a callback in its delegate. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX XSTR("GrowlClicked!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX - * @abstract Part of the name of the distributed notification sent when a supported notification times out without being clicked. - * @discussion When a Growl notification with a click context times out, Growl posts a distributed notification - * whose name is in the format: - * [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX] - * The GrowlApplicationBridge responds to this notification by calling a callback in its delegate. - * NOTE: The user may have actually clicked the 'close' button; this triggers an *immediate* time-out of the notification. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX XSTR("GrowlTimedOut!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_ON - * @abstract The distributed notification sent when the Notification Center support is toggled on in Growl 2.0 - * @discussion When the user enables Notification Center support in Growl 2.0, this notification is sent - * to inform all running apps that they should now speak to Notification Center directly. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_ON XSTR("GrowlNotificationCenterOn!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_OFF - * @abstract The distributed notification sent when the Notification Center support is toggled off in Growl 2.0 - * @discussion When the user enables Notification Center support in Growl 2.0, this notification is sent - * to inform all running apps that they should no longer speak to Notification Center directly. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_OFF XSTR("GrowlNotificationCenterOff!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_QUERY - * @abstract The distributed notification sent by an application to query Growl 2.0's notification center support. - * @discussion When an app starts up, it will send this query to get Growl 2.0 to spit out whether notification - * center support is on or off. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_QUERY XSTR("GrowlNotificationCenterYN?") - - -/*! @group Other symbols */ -/* Symbols which don't fit into any of the other categories. */ - -/*! @defined GROWL_KEY_CLICKED_CONTEXT - * @abstract Used internally as the key for the clickedContext passed over DNC. - * @discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the - * click context that was supplied in the original notification. - */ -#define GROWL_KEY_CLICKED_CONTEXT XSTR("ClickedContext") -/*! @defined GROWL_REG_DICT_EXTENSION - * @abstract The filename extension for registration dictionaries. - * @discussion The GrowlApplicationBridge in Growl.framework registers with - * Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION) - * and opening it in the GrowlHelperApp. This happens whether or not Growl is - * running; if it was stopped, it quits immediately without listening for - * notifications. - */ -#define GROWL_REG_DICT_EXTENSION XSTR("growlRegDict") - - -#define GROWL_POSITION_PREFERENCE_KEY @"GrowlSelectedPosition" - -#define GROWL_PLUGIN_CONFIG_ID XSTR("GrowlPluginConfigurationID") - -#endif //ndef _GROWLDEFINES_H diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Resources/Info.plist b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 6a90f41b9..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - BuildMachineOSBuild - 12C60 - CFBundleDevelopmentRegion - English - CFBundleExecutable - Growl - CFBundleIdentifier - com.growl.growlframework - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.0.1 - CFBundleSignature - GRRR - CFBundleVersion - 2.0.1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 4G2008a - DTPlatformVersion - GM - DTSDKBuild - 12C37 - DTSDKName - macosx10.8 - DTXcode - 0452 - DTXcodeBuild - 4G2008a - NSPrincipalClass - GrowlApplicationBridge - - diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/_CodeSignature/CodeResources b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/_CodeSignature/CodeResources deleted file mode 100644 index 420b594ac..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/A/_CodeSignature/CodeResources +++ /dev/null @@ -1,34 +0,0 @@ - - - - - files - - Resources/Info.plist - - VZb3f8My4te/5JwcjfvotgCXTAs= - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^version.plist$ - - - - diff --git a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/Current b/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/Current deleted file mode 120000 index 8c7e5a667..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Growl.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..bfabdabe8 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon-16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon-16@2x.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon-32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon-32@2x.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon-128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon-128@2x.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "icon-256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "icon-256@2x.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "icon-512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "icon-512@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-128.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-128.png new file mode 100644 index 000000000..1006b8206 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-128.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-128@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-128@2x.png new file mode 100644 index 000000000..ea7433539 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-128@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-16.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-16.png new file mode 100644 index 000000000..fc1987cb3 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-16.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-16@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-16@2x.png new file mode 100644 index 000000000..09ae68008 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-16@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-256.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-256.png new file mode 100644 index 000000000..ea7433539 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-256.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-256@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-256@2x.png new file mode 100644 index 000000000..704187e93 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-256@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-32.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-32.png new file mode 100644 index 000000000..09ae68008 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-32.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-32@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-32@2x.png new file mode 100644 index 000000000..fe18ecddb Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-32@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-512.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-512.png new file mode 100644 index 000000000..704187e93 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-512.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-512@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-512@2x.png new file mode 100644 index 000000000..9971fa352 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/AppIcon.appiconset/icon-512@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/Contents.json new file mode 100644 index 000000000..228097351 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "logo-1.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "logo.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/logo-1.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/logo-1.png new file mode 100644 index 000000000..4dd29ab9b Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/logo-1.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/logo.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/logo.png new file mode 100644 index 000000000..082c1748b Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/logo.imageset/logo.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/Contents.json new file mode 100644 index 000000000..61476fab9 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-editor-white.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-editor-white@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/open-in-editor-white.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/open-in-editor-white.png new file mode 100644 index 000000000..7561ed193 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/open-in-editor-white.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/open-in-editor-white@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/open-in-editor-white@2x.png new file mode 100644 index 000000000..7c0e08e57 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor-white.imageset/open-in-editor-white@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/Contents.json new file mode 100644 index 000000000..1022c31ea --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-editor.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-editor@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/open-in-editor.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/open-in-editor.png new file mode 100644 index 000000000..06f3e010c Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/open-in-editor.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/open-in-editor@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/open-in-editor@2x.png new file mode 100644 index 000000000..ea70b9528 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-editor.imageset/open-in-editor@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/Contents.json new file mode 100644 index 000000000..c3357f076 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-finder-white.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-finder-white@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/open-in-finder-white.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/open-in-finder-white.png new file mode 100644 index 000000000..23d975c92 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/open-in-finder-white.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/open-in-finder-white@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/open-in-finder-white@2x.png new file mode 100644 index 000000000..acf0fde6e Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder-white.imageset/open-in-finder-white@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/Contents.json new file mode 100644 index 000000000..96f8df963 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-finder.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-finder@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/open-in-finder.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/open-in-finder.png new file mode 100644 index 000000000..4b712fa71 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/open-in-finder.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/open-in-finder@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/open-in-finder@2x.png new file mode 100644 index 000000000..234f7d4b4 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-finder.imageset/open-in-finder@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/Contents.json new file mode 100644 index 000000000..6b7504451 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-terminal-white.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-terminal-white@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/open-in-terminal-white.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/open-in-terminal-white.png new file mode 100644 index 000000000..38d2d81d6 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/open-in-terminal-white.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/open-in-terminal-white@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/open-in-terminal-white@2x.png new file mode 100644 index 000000000..8b9190c88 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal-white.imageset/open-in-terminal-white@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/Contents.json new file mode 100644 index 000000000..b145a3411 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-terminal.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-terminal@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/open-in-terminal.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/open-in-terminal.png new file mode 100644 index 000000000..eee421bef Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/open-in-terminal.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/open-in-terminal@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/open-in-terminal@2x.png new file mode 100644 index 000000000..7eef41672 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-terminal.imageset/open-in-terminal@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/Contents.json new file mode 100644 index 000000000..d84dcb3cd --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-xcode-white.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-xcode-white@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/open-in-xcode-white.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/open-in-xcode-white.png new file mode 100644 index 000000000..ac8a11dea Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/open-in-xcode-white.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/open-in-xcode-white@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/open-in-xcode-white@2x.png new file mode 100644 index 000000000..a5b74ce37 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode-white.imageset/open-in-xcode-white@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/Contents.json new file mode 100644 index 000000000..c79552eef --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "open-in-xcode.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "open-in-xcode@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/open-in-xcode.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/open-in-xcode.png new file mode 100644 index 000000000..889091bbc Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/open-in-xcode.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/open-in-xcode@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/open-in-xcode@2x.png new file mode 100644 index 000000000..2d51078cb Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/open-in-xcode.imageset/open-in-xcode@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/Contents.json new file mode 100644 index 000000000..438fd1e6a --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "resync-white.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "resync-white@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/resync-white.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/resync-white.png new file mode 100644 index 000000000..a6e8bc53f Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/resync-white.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/resync-white@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/resync-white@2x.png new file mode 100644 index 000000000..7c525f305 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync-white.imageset/resync-white@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/Contents.json new file mode 100644 index 000000000..5d1abc1a6 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "resync.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "resync@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/resync.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/resync.png new file mode 100644 index 000000000..5f68a7cbe Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/resync.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/resync@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/resync@2x.png new file mode 100644 index 000000000..eb4a7fe7e Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/resync.imageset/resync@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/Contents.json new file mode 100644 index 000000000..076b3c5a7 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "run-white.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "run-white@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/run-white.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/run-white.png new file mode 100644 index 000000000..f478f54da Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/run-white.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/run-white@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/run-white@2x.png new file mode 100644 index 000000000..6eb4aa61f Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run-white.imageset/run-white@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/Contents.json new file mode 100644 index 000000000..1a623ba9a --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "run.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "run@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/run.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/run.png new file mode 100644 index 000000000..196ae06fe Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/run.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/run@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/run@2x.png new file mode 100644 index 000000000..46ebcfeb3 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/run.imageset/run@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/Contents.json new file mode 100644 index 000000000..4949c3028 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "status-icon-error.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "status-icon-error@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/status-icon-error.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/status-icon-error.png new file mode 100644 index 000000000..40708df3a Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/status-icon-error.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/status-icon-error@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/status-icon-error@2x.png new file mode 100644 index 000000000..d83bbf67e Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-error.imageset/status-icon-error@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/Contents.json new file mode 100644 index 000000000..72969ef8e --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "status-icon-inactive.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "status-icon-inactive@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/status-icon-inactive.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/status-icon-inactive.png new file mode 100644 index 000000000..bf3419bdd Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/status-icon-inactive.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/status-icon-inactive@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/status-icon-inactive@2x.png new file mode 100644 index 000000000..f211be1e9 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-inactive.imageset/status-icon-inactive@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/Contents.json new file mode 100644 index 000000000..7ffae5e38 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "status-icon-working.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "status-icon-working@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/status-icon-working.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/status-icon-working.png new file mode 100644 index 000000000..b30331206 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/status-icon-working.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/status-icon-working@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/status-icon-working@2x.png new file mode 100644 index 000000000..a4fc5eb13 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/status-icon-working.imageset/status-icon-working@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/Contents.json new file mode 100644 index 000000000..3564a183b --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "stop-white.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "stop-white@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/stop-white.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/stop-white.png new file mode 100644 index 000000000..c560752a2 Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/stop-white.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/stop-white@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/stop-white@2x.png new file mode 100644 index 000000000..cc9cd167a Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop-white.imageset/stop-white@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/Contents.json b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/Contents.json new file mode 100644 index 000000000..200b65658 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "stop.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "stop@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/stop.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/stop.png new file mode 100644 index 000000000..0267f32fa Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/stop.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/stop@2x.png b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/stop@2x.png new file mode 100644 index 000000000..9a91a6a4d Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Images.xcassets/stop.imageset/stop@2x.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Info.plist b/Tools/XcodeCapp/XcodeCapp/Info.plist index ddb9c5a21..e3365df23 100644 --- a/Tools/XcodeCapp/XcodeCapp/Info.plist +++ b/Tools/XcodeCapp/XcodeCapp/Info.plist @@ -2,39 +2,60 @@ - XCCLastCappuccinoReleaseURL - https://github.com/cappuccino/cappuccino/archive/0.9.7.zip - XCCLastCappuccinoMasterBranchURL - https://github.com/cappuccino/cappuccino/archive/master.zip + NSUserNotificationAlertStyle + alert CFBundleDevelopmentRegion - English + en + CFBundleDocumentTypes + + + CFBundleTypeIconFile + + CFBundleTypeName + LSItemContentTypes + CFBundleTypeRole + Editor + LSHandlerRank + Default + LSItemContentTypes + + public.folder + + + CFBundleExecutable - ${EXECUTABLE_NAME} + $(EXECUTABLE_NAME) CFBundleIconFile - XcodeCapp.icns + Icon.icns CFBundleIdentifier org.cappuccino.xcodecapp CFBundleInfoDictionaryVersion 6.0 CFBundleName - ${PRODUCT_NAME} + $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString - 3.2 + Version 4.0 CFBundleSignature ???? CFBundleVersion - 3.2 + 1 LSApplicationCategoryType public.app-category.developer-tools - LSUIElement - + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + Copyright © 2015 cappuccino-project. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass NSApplication XCCCompatibilityVersion - 3 + 4 + XCCLastCappuccinoMasterBranchURL + https://github.com/cappuccino/cappuccino/archive/master.zip + XCCLastCappuccinoReleaseURL + https://github.com/cappuccino/cappuccino/archive/0.9.8.zip diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m index 4ec1e7cbf..540efada1 100755 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m +++ b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m @@ -45,7 +45,7 @@ static DDASLLogger *sharedInstance; return sharedInstance; } -- (id)init +- (instancetype)init { if (sharedInstance != nil) { diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h index 57c2f096c..c24a5e4e2 100755 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h +++ b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h @@ -487,11 +487,11 @@ NSString *DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy); * If you write custom loggers or formatters, you will be dealing with objects of this class. **/ -enum { +typedef NS_OPTIONS(NSUInteger, DDLogMessageOptions) +{ DDLogMessageCopyFile = 1 << 0, DDLogMessageCopyFunction = 1 << 1, }; -typedef int DDLogMessageOptions; @interface DDLogMessage : NSObject { @@ -534,7 +534,7 @@ typedef int DDLogMessageOptions; * However, if you need them to be copied you may use the options parameter to specify this. * Options is a bitmask which supports DDLogMessageCopyFile and DDLogMessageCopyFunction. **/ -- (id)initWithLogMsg:(NSString *)logMsg +- (instancetype)initWithLogMsg:(NSString *)logMsg level:(int)logLevel flag:(int)logFlag context:(int)logContext @@ -548,18 +548,18 @@ typedef int DDLogMessageOptions; * Returns the threadID as it appears in NSLog. * That is, it is a hexadecimal value which is calculated from the machThreadID. **/ -- (NSString *)threadID; +@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *threadID; /** * Convenience property to get just the file name, as the file variable is generally the full file path. * This method does not include the file extension, which is generally unwanted for logging purposes. **/ -- (NSString *)fileName; +@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *fileName; /** * Returns the function variable in NSString form. **/ -- (NSString *)methodName; +@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *methodName; @end @@ -591,7 +591,6 @@ typedef int DDLogMessageOptions; dispatch_queue_t loggerQueue; } -- (id )logFormatter; -- (void)setLogFormatter:(id )formatter; +@property (NS_NONATOMIC_IOSONLY, strong) id logFormatter; @end diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m index 7d75d8121..ed21455fd 100755 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m +++ b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m @@ -786,7 +786,7 @@ NSString *DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy) @implementation DDLoggerNode -- (id)initWithLogger:(id )aLogger loggerQueue:(dispatch_queue_t)aLoggerQueue +- (instancetype)initWithLogger:(id )aLogger loggerQueue:(dispatch_queue_t)aLoggerQueue { if ((self = [super init])) { @@ -834,7 +834,7 @@ static char *dd_str_copy(const char *str) return result; } -- (id)initWithLogMsg:(NSString *)msg +- (instancetype)initWithLogMsg:(NSString *)msg level:(int)level flag:(int)flag context:(int)context @@ -890,7 +890,7 @@ static char *dd_str_copy(const char *str) if (function == NULL) return nil; else - return [[NSString alloc] initWithUTF8String:function]; + return @(function); } - (void)dealloc @@ -913,7 +913,7 @@ static char *dd_str_copy(const char *str) @implementation DDAbstractLogger -- (id)init +- (instancetype)init { if ((self = [super init])) { diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m index 3157d84e9..599240e43 100755 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m +++ b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m @@ -115,7 +115,7 @@ size_t resetCodeLen; } -- (id)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)mask context:(int)ctxt; +- (instancetype)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)mask context:(int)ctxt NS_DESIGNATED_INITIALIZER; @end @@ -813,7 +813,7 @@ static DDTTYLogger *sharedInstance; return sharedInstance; } -- (id)init +- (instancetype)init { if (sharedInstance != nil) { @@ -827,12 +827,12 @@ static DDTTYLogger *sharedInstance; calendar = [NSCalendar autoupdatingCurrentCalendar]; calendarUnitFlags = 0; - calendarUnitFlags |= NSYearCalendarUnit; - calendarUnitFlags |= NSMonthCalendarUnit; - calendarUnitFlags |= NSDayCalendarUnit; - calendarUnitFlags |= NSHourCalendarUnit; - calendarUnitFlags |= NSMinuteCalendarUnit; - calendarUnitFlags |= NSSecondCalendarUnit; + calendarUnitFlags |= NSCalendarUnitYear; + calendarUnitFlags |= NSCalendarUnitMonth; + calendarUnitFlags |= NSCalendarUnitDay; + calendarUnitFlags |= NSCalendarUnitHour; + calendarUnitFlags |= NSCalendarUnitMinute; + calendarUnitFlags |= NSCalendarUnitSecond; // Initialze 'app' variable (char *) @@ -954,7 +954,7 @@ static DDTTYLogger *sharedInstance; } if (i < [colorProfilesArray count]) - [colorProfilesArray replaceObjectAtIndex:i withObject:newColorProfile]; + colorProfilesArray[i] = newColorProfile; else [colorProfilesArray addObject:newColorProfile]; }}; @@ -992,7 +992,7 @@ static DDTTYLogger *sharedInstance; NSLogInfo(@"DDTTYLogger: newColorProfile: %@", newColorProfile); - [colorProfilesDict setObject:newColorProfile forKey:tag]; + colorProfilesDict[tag] = newColorProfile; }}; // The design of the setter logic below is taken from the DDAbstractLogger implementation. @@ -1189,7 +1189,7 @@ static DDTTYLogger *sharedInstance; { if (logMessage->tag) { - colorProfile = [colorProfilesDict objectForKey:logMessage->tag]; + colorProfile = colorProfilesDict[logMessage->tag]; } if (colorProfile == nil) { @@ -1359,7 +1359,7 @@ static DDTTYLogger *sharedInstance; @implementation DDTTYLoggerColorProfile -- (id)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)aMask context:(int)ctxt +- (instancetype)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)aMask context:(int)ctxt { if ((self = [super init])) { @@ -1390,7 +1390,7 @@ static DDTTYLogger *sharedInstance; // Map foreground color to closest available shell color fgCodeIndex = [DDTTYLogger codeIndexForColor:fgColor]; - fgCodeRaw = [codes_fg objectAtIndex:fgCodeIndex]; + fgCodeRaw = codes_fg[fgCodeIndex]; NSString *escapeSeq = @"\033["; @@ -1424,7 +1424,7 @@ static DDTTYLogger *sharedInstance; // Map background color to closest available shell color bgCodeIndex = [DDTTYLogger codeIndexForColor:bgColor]; - bgCodeRaw = [codes_bg objectAtIndex:bgCodeIndex]; + bgCodeRaw = codes_bg[bgCodeIndex]; NSString *escapeSeq = @"\033["; diff --git a/Tools/XcodeCapp/XcodeCapp/NSMutableArray+moveIndexes.h b/Tools/XcodeCapp/XcodeCapp/NSMutableArray+moveIndexes.h new file mode 100644 index 000000000..fdfedd6a1 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/NSMutableArray+moveIndexes.h @@ -0,0 +1,15 @@ +// +// NSMutableArray+moveIndexes.h +// XcodeCapp +// +// Created by Antoine Mercadal on 6/2/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@interface NSMutableArray (MoveIndexes) + +- (void)moveIndexes:(NSIndexSet *)indexes toIndex:(NSUInteger)insertIndex; + +@end \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/NSMutableArray+moveIndexes.m b/Tools/XcodeCapp/XcodeCapp/NSMutableArray+moveIndexes.m new file mode 100644 index 000000000..6dadc75d3 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/NSMutableArray+moveIndexes.m @@ -0,0 +1,43 @@ +// +// NSMutableArray+moveIndexes.m +// XcodeCapp +// +// Created by Antoine Mercadal on 6/2/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "NSMutableArray+moveIndexes.h" + +@implementation NSMutableArray (MoveIndexes) + +- (void)moveIndexes:(NSIndexSet *)indexes toIndex:(NSUInteger)insertIndex +{ + NSUInteger aboveCount = 0; + id object; + NSUInteger removeIndex; + + NSUInteger index = [indexes lastIndex]; + + while (index != NSNotFound) + { + if (index >= insertIndex) + { + removeIndex = index + aboveCount; + aboveCount ++; + } + else + { + removeIndex = index; + insertIndex --; + } + + object = self[removeIndex]; + + [self removeObjectAtIndex:removeIndex]; + [self insertObject:object atIndex:insertIndex]; + + index = [indexes indexLessThanIndex:index]; + } +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/Notifications.h b/Tools/XcodeCapp/XcodeCapp/Notifications.h deleted file mode 100644 index b5478399a..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Notifications.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Notifications.h -// XcodeCapp -// -// Created by Aparajita on 4/27/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#ifndef XcodeCapp_Notifications_h -#define XcodeCapp_Notifications_h - -extern NSString * const XCCProjectDidFinishLoadingNotification; -extern NSString * const XCCBatchDidStartNotification; -extern NSString * const XCCBatchDidEndNotification; -extern NSString * const XCCConversionDidStartNotification; -extern NSString * const XCCConversionDidEndNotification; -extern NSString * const XCCConversionDidGenerateErrorNotification; - -#endif diff --git a/Tools/XcodeCapp/XcodeCapp/Notifications.m b/Tools/XcodeCapp/XcodeCapp/Notifications.m deleted file mode 100644 index b8df14b4f..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Notifications.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// Notifications.m -// XcodeCapp -// -// Created by Aparajita on 4/27/13. -// -// - -#include "Notifications.h" - - -NSString * const XCCProjectDidFinishLoadingNotification = @"XCCProjectDidFinishLoadingNotification"; -NSString * const XCCBatchDidStartNotification = @"XCCBatchDidStartNotification"; -NSString * const XCCBatchDidEndNotification = @"XCCBatchDidEndNotification"; -NSString * const XCCConversionDidStartNotification = @"XCCConversionDidStartNotification"; -NSString * const XCCConversionDidEndNotification = @"XCCConversionDidStopNotification"; -NSString * const XCCConversionDidGenerateErrorNotification = @"XCCConversionDidGenerateErrorNotification"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/OperationsView.xib b/Tools/XcodeCapp/XcodeCapp/OperationsView.xib new file mode 100644 index 000000000..b2145b88e --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/OperationsView.xib @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.h b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.h deleted file mode 100644 index e8254ddd4..000000000 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// ProcessSourceOperation.h -// XcodeCapp -// -// Created by Aparajita on 4/27/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#import - -@class XcodeCapp; - - -@interface ProcessSourceOperation : NSOperation - -// sourcePath should be a path within the project (no resolved symlinks) -- (id)initWithXCC:(XcodeCapp *)xcc projectId:(NSNumber *)projectId sourcePath:(NSString *)sourcePath; - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m deleted file mode 100644 index f41ffbddf..000000000 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ /dev/null @@ -1,217 +0,0 @@ -// -// ProcessSourceOperation.m -// XcodeCapp -// -// Created by Aparajita on 4/27/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#import "ProcessSourceOperation.h" -#import "Notifications.h" -#import "XcodeCapp.h" - - -@interface ProcessSourceOperation () - -@property XcodeCapp *xcc; -@property NSNumber *projectId; -@property NSString *sourcePath; -@property NSString *projectPath; - -@end - - -@implementation ProcessSourceOperation - -- (id)initWithXCC:(XcodeCapp *)xcc projectId:(NSNumber *)projectId sourcePath:(NSString *)sourcePath -{ - self = [super init]; - - if (self) - { - self.xcc = xcc; - self.projectId = projectId; - self.sourcePath = sourcePath; - self.projectPath = xcc.projectPath; - } - - return self; -} - -- (void)main -{ - if (self.isCancelled) - return; - - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - - NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath}; - [center postNotificationName:XCCConversionDidStartNotification object:self userInfo:info]; - - DDLogVerbose(@"Conversion started: %@", self.sourcePath); - - NSString *launchPath = nil; - NSArray *arguments = nil; - NSString *response = nil; - NSString *projectRelativePath = [self.sourcePath substringFromIndex:self.projectPath.length + 1]; - NSString *notificationTitle = nil; - NSString *notificationMessage = projectRelativePath.lastPathComponent; - - if ([self.xcc isXibFile:self.sourcePath]) - { - launchPath = self.xcc.executablePaths[@"nib2cib"]; - arguments = @[ - @"--no-colors", - self.sourcePath - ]; - - notificationTitle = @"Xib converted"; - } - else if ([self.xcc isObjjFile:self.sourcePath]) - { - launchPath = self.xcc.executablePaths[@"objj"]; - arguments = @[ - self.xcc.parserPath, - self.projectPath, - self.sourcePath - ]; - - notificationTitle = @"Objective-J source processed"; - } - else if ([self.xcc isXCCIgnoreFile:self.sourcePath]) - { - if (self.isCancelled) - return; - - [self.xcc performSelectorOnMainThread:@selector(computeIgnoredPaths) withObject:nil waitUntilDone:NO]; - - notificationTitle = @"Parsed .xcodecapp-ignore"; - notificationMessage = @"Ignored paths updated"; - } - - // Run the task and get the response if needed - NSInteger status = 0; - - if (arguments) - { - if (self.isCancelled) - return; - - DDLogVerbose(@"Running processing task: %@", launchPath); - - NSDictionary *taskResult = [self.xcc runTaskWithLaunchPath:launchPath - arguments:arguments - returnType:kTaskReturnTypeAny]; - - status = [taskResult[@"status"] intValue]; - response = taskResult[@"response"]; - - DDLogInfo(@"Processed %@: [%ld, %@]", self.sourcePath, status, status ? response : @""); - - if (self.isCancelled) - return; - - if (status != 0) - { - if ([self.xcc isXibFile:self.sourcePath]) - { - if (response.length == 0) - response = @"An unspecified error occurred"; - - notificationTitle = @"Error converting xib"; - NSString *message = [NSString stringWithFormat:@"%@\n%@", self.sourcePath.lastPathComponent, response]; - - NSDictionary *info = - @{ - @"projectId":self.projectId, - @"message":message, - @"path":self.sourcePath, - @"status":taskResult[@"status"] - }; - - if (self.isCancelled) - return; - - [center postNotificationName:XCCConversionDidGenerateErrorNotification object:self userInfo:info]; - } - else - { - notificationTitle = [(status == XCCStatusCodeError ? @"Error" : @"Warning") stringByAppendingString:@" parsing Objective-J source"]; - - @try - { - NSArray *errors = [response propertyList]; - - for (NSDictionary *error in errors) - { - [self postErrorNotificationForPath:error[@"path"] line:[error[@"line"] intValue] message:error[@"message"] status:status]; - } - } - @catch (NSException *exception) - { - [self postErrorNotificationForPath:self.sourcePath line:0 message:response status:status]; - } - } - - if ([self.xcc shouldShowErrorNotification]) - [self notifyUserWithTitle:notificationTitle message:notificationMessage]; - } - else if (!self.xcc.isLoadingProject) - { - BOOL showFinalNotification = YES; - - // At this point, we should only detect warnings - if ([self.xcc shouldProcessWithObjjWarnings] && ![self.xcc isXibFile:self.sourcePath]) - { - showFinalNotification = [self.xcc checkObjjWarningsForPath:[NSArray arrayWithObject:self.sourcePath]]; - [self.xcc showObjjWarnings]; - } - - if ([self.xcc shouldProcessWithCappLint] && ![self.xcc isXibFile:self.sourcePath]) - { - showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]] && showFinalNotification; - [self.xcc showCappLintWarnings]; - } - - if (showFinalNotification) - [self notifyUserWithTitle:notificationTitle message:notificationMessage]; - } - } - - if (!self.isCancelled) - { - DDLogVerbose(@"Conversion ended: %@", self.sourcePath); - - [center postNotificationName:XCCConversionDidEndNotification object:self userInfo:@{ @"projectId":self.projectId, @"path":self.sourcePath }]; - } -} - -- (void)postErrorNotificationForPath:(NSString *)path line:(int)line message:(NSString *)message status:(NSInteger)status -{ - NSMutableDictionary *info = [NSMutableDictionary dictionaryWithObjectsAndKeys: - path, @"path", - [NSNumber numberWithInt:line], @"line", - [NSNumber numberWithInteger:status], @"status", - nil]; - - info[@"projectId"] = self.projectId; - info[@"message"] = [NSString stringWithFormat:@"Compilation issue: %@, line %d\n%@", [self.sourcePath lastPathComponent], 0, message]; - - if (self.isCancelled) - return; - - [[NSNotificationCenter defaultCenter] postNotificationName:XCCConversionDidGenerateErrorNotification object:self userInfo:info]; -} - -- (void)notifyUserWithTitle:(NSString *)title message:(NSString *)message -{ - NSDictionary *info = @{ @"projectId":self.projectId, @"title":title, @"message":message }; - - if (self.isCancelled) - return; - - // nib2cib can take a while to run, show a message while the conversion is happening - [self.xcc wantUserNotificationWithInfo:info]; -} - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/Release.xcconfig b/Tools/XcodeCapp/XcodeCapp/Release.xcconfig index 047a9cf0d..2590a2132 100644 --- a/Tools/XcodeCapp/XcodeCapp/Release.xcconfig +++ b/Tools/XcodeCapp/XcodeCapp/Release.xcconfig @@ -13,7 +13,7 @@ ONLY_ACTIVE_ARCH = YES DEBUG_INFORMATION_FORMAT = dwarf COMBINE_HIDPI_IMAGES = YES INSTALL_PATH = $(LOCAL_APPS_DIR) -MACOSX_DEPLOYMENT_TARGET = 10.6.8 +MACOSX_DEPLOYMENT_TARGET = 10.10 COPY_PHASE_STRIP = YES INFOPLIST_FILE = XcodeCapp/Info.plist PRODUCT_NAME = XcodeCapp diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_128x128.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_128x128.png deleted file mode 100644 index ae7b61b39..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_128x128.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_128x128@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_128x128@2x.png deleted file mode 100644 index 2828424ba..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_128x128@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_16x16.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_16x16.png deleted file mode 100644 index 2d980b6e6..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_16x16.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_16x16@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_16x16@2x.png deleted file mode 100644 index d852f1502..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_16x16@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_256x256.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_256x256.png deleted file mode 100644 index 2828424ba..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_256x256.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_256x256@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_256x256@2x.png deleted file mode 100644 index 5459552f2..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_256x256@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_32x32.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_32x32.png deleted file mode 100644 index d852f1502..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_32x32.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_32x32@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_32x32@2x.png deleted file mode 100644 index d90892068..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_32x32@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_512x512.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_512x512.png deleted file mode 100644 index 8428a569f..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_512x512.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_512x512@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_512x512@2x.png deleted file mode 100644 index 8b2cc8ce7..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/XcodeCapp.iconset/icon_512x512@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/edit.png b/Tools/XcodeCapp/XcodeCapp/Resources/edit.png new file mode 100644 index 000000000..42d8da14f Binary files /dev/null and b/Tools/XcodeCapp/XcodeCapp/Resources/edit.png differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/help.pdf b/Tools/XcodeCapp/XcodeCapp/Resources/help.pdf deleted file mode 100644 index d0361b49d..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/help.pdf and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-active.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-active.png deleted file mode 100644 index 3d8fd512c..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-active.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-active@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-active@2x.png deleted file mode 100644 index 63189ad30..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-active@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-error.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-error.png deleted file mode 100644 index 1686d61eb..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-error.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-error@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-error@2x.png deleted file mode 100644 index c91c63304..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-error@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-inactive.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-inactive.png deleted file mode 100644 index 526d15262..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-inactive.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-inactive@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-inactive@2x.png deleted file mode 100644 index dab411e5f..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-inactive@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-working.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-working.png deleted file mode 100644 index 537e5d6f9..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-working.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon-working@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon-working@2x.png deleted file mode 100644 index 24007f775..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon-working@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon_128x128.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon_128x128.png deleted file mode 100644 index ae7b61b39..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon_128x128.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Resources/icon_128x128@2x.png b/Tools/XcodeCapp/XcodeCapp/Resources/icon_128x128@2x.png deleted file mode 100644 index 2828424ba..000000000 Binary files a/Tools/XcodeCapp/XcodeCapp/Resources/icon_128x128@2x.png and /dev/null differ diff --git a/Tools/XcodeCapp/XcodeCapp/Scripts/pbxprojModifier.py b/Tools/XcodeCapp/XcodeCapp/Scripts/pbxprojModifier.py index ac2a21a82..0fdacd9af 100755 --- a/Tools/XcodeCapp/XcodeCapp/Scripts/pbxprojModifier.py +++ b/Tools/XcodeCapp/XcodeCapp/Scripts/pbxprojModifier.py @@ -8,7 +8,7 @@ from mod_pbxproj import XcodeProject class PBXModifier (object): XCODE_SUPPORT_FOLDER = u".XcodeSupport" - SLASH_REPLACEMENT = u"∕" # DIVISION SLASH Unicode U+2215 + SLASH_REPLACEMENT = u"::" FRAMEWORKS_RE = re.compile(ur"^(.+/Frameworks/(?:Debug|Source)/([^/]+))/.+$") XCC_GENERAL_INCLUDE = u"xcc_general_include.h" diff --git a/Tools/XcodeCapp/XcodeCapp/Scripts/supawhich b/Tools/XcodeCapp/XcodeCapp/Scripts/supawhich new file mode 100755 index 000000000..39b1dbbd7 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/Scripts/supawhich @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +ARGS=($@) + +echo "{" +for ((i = 0; i < $#; i++)); do + BINARY=${ARGS[$i]} + LOCATION=`which $BINARY` + + if [[ $? == 1 ]]; then + exit 1 + fi + + END="" + + if [[ $i != $(( $# - 1 )) ]]; then + END="," + fi + + echo " \"$BINARY\": \"$LOCATION\"$END" +done; +echo "}" \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/SettingsView.xib b/Tools/XcodeCapp/XcodeCapp/SettingsView.xib new file mode 100644 index 000000000..cbb0a9ae5 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/SettingsView.xib @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h deleted file mode 100644 index ee0539061..000000000 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// UserDefaults.h -// XcodeCapp -// -// Created by Aparajita on 4/9/13. -// -// - -#ifndef XcodeCapp_UserDefaults_h -#define XcodeCapp_UserDefaults_h - -#import - -extern NSString * const kDefaultLastEventId; -extern NSString * const kDefaultFirstLaunch; -extern NSString * const kDefaultFirstLaunchVersion; -extern NSString * const kDefaultXCCAPIMode; -extern NSString * const kDefaultXCCReactToInodeMod; -extern NSString * const kDefaultXCCReopenLastProject; -extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; -extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; -extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; -extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; -extern NSString * const kDefaultXCCUseDebugFrameworkWithObjj; -extern NSString * const kDefaultXCCShouldProcessObjj; -extern NSString * const kDefaultXCCProjectHistory; -extern NSString * const kDefaultLastOpenedPath; -extern NSString * const kDefaultPathModificationDates; -extern NSString * const kDefaultMaxRecentProjects; -extern NSString * const kDefaultLogLevel; -extern NSString * const kDefaultAutoOpenXcodeProject; -extern NSString * const kDefaultUseSymlinkWhenCreatingProject; -extern NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch; -extern NSString * const kDefaultXCCPanelStyleUtility; -extern NSString * const kDefaultXCCPanelActiveAppWhenOpening; - -#endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m deleted file mode 100644 index 88c919dd2..000000000 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// UserDefaults.m -// XcodeCapp -// -// Created by Aparajita on 4/9/13. -// -// - -#include "UserDefaults.h" - - -NSString * const kDefaultLastEventId = @"lastEventId"; -NSString * const kDefaultFirstLaunch = @"FirstLaunch"; -NSString * const kDefaultFirstLaunchVersion = @"firstLaunchVersion"; -NSString * const kDefaultXCCAPIMode = @"XCCAPIMode"; -NSString * const kDefaultXCCReactToInodeMod = @"XCCReactMode"; -NSString * const kDefaultXCCReopenLastProject = @"XCCReopenLastProject"; -NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors = @"XCCAutoOpenErrorsPanelOnErrors"; -NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint = @"XCCAutoOpenErrorsPanelOnCappLint"; -NSString * const kDefaultXCCAutoShowNotificationOnErrors = @"XCCAutoOpenShowNotificationErrors"; -NSString * const kDefaultXCCAutoShowNotificationOnCappLint = @"XCCAutoShowNotificationOnCappLint"; -NSString * const kDefaultXCCUseDebugFrameworkWithObjj = @"XCCUseDebugFrameworkWithObjj"; -NSString * const kDefaultXCCShouldProcessObjj = @"XCCShouldProcessObjj"; -NSString * const kDefaultXCCProjectHistory = @"XCCProjectHistory"; -NSString * const kDefaultLastOpenedPath = @"LastOpenedPath"; -NSString * const kDefaultPathModificationDates = @"pathModificationDates"; -NSString * const kDefaultMaxRecentProjects = @"maxRecentProjects"; -NSString * const kDefaultLogLevel = @"logLevel"; -NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; -NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; -NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; -NSString * const kDefaultXCCPanelStyleUtility = @"XCCPanelStyleUtility"; -NSString * const kDefaultXCCPanelActiveAppWhenOpening = @"XCCPanelActiveAppWhenOpening"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XCCAbstractOperation.h b/Tools/XcodeCapp/XcodeCapp/XCCAbstractOperation.h new file mode 100644 index 000000000..34ed0c25c --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCAbstractOperation.h @@ -0,0 +1,28 @@ +// +// XCCAbstractOperation.h +// XcodeCapp +// +// Created by Antoine Mercadal on 6/2/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import +#import "XCCCappuccinoProject.h" + +@class XCCCappuccinoProject; + +@interface XCCAbstractOperation : NSOperation +{ + XCCTaskLauncher *taskLauncher; +} + +@property NSString *operationName; +@property NSString *operationDescription; +@property XCCCappuccinoProject *cappuccinoProject; + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)aCappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher; +- (void)dispatchNotificationName:(NSString *)notificationName userInfo:(id)userInfo; +- (void)dispatchNotificationName:(NSString *)notificationName; +@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSMutableDictionary *operationInformations; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCAbstractOperation.m b/Tools/XcodeCapp/XcodeCapp/XCCAbstractOperation.m new file mode 100644 index 000000000..da3445b77 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCAbstractOperation.m @@ -0,0 +1,43 @@ +// +// XCCAbstractOperation.m +// XcodeCapp +// +// Created by Antoine Mercadal on 6/2/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCAbstractOperation.h" + + +@implementation XCCAbstractOperation + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)aCappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher +{ + if (self = [super init]) + { + self.cappuccinoProject = aCappuccinoProject; + self->taskLauncher = aTaskLauncher; + } + + return self; +} + +- (NSMutableDictionary *)operationInformations +{ + return [@{@"cappuccinoProject": self.cappuccinoProject} mutableCopy]; +} + +- (void)dispatchNotificationName:(NSString *)notificationName +{ + [self dispatchNotificationName:notificationName userInfo:[self operationInformations]]; +} + +- (void)dispatchNotificationName:(NSString *)notificationName userInfo:(id)userInfo +{ + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:userInfo]; + }); +} + + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.h b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.h new file mode 100644 index 000000000..8b6351f06 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.h @@ -0,0 +1,78 @@ +// +// CappuccinoProject.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/6/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import +#import "XCCOperationError.h" + +@class XCCTaskLauncher; + +typedef NS_ENUM(NSInteger, XCCCappuccinoProjectStatus) +{ + XCCCappuccinoProjectStatusStopped, + XCCCappuccinoProjectStatusListening +}; + + +extern NSString * const XCCCompatibilityVersionKey; +extern NSString * const XCCCappuccinoProjectBinPathsKey; +extern NSString * const XCCCappuccinoProjectPreviousStatusKey; + + +@interface XCCCappuccinoProject : NSObject +{ + NSMutableDictionary *settings; +} + +@property NSString *supportPath; +@property NSString *projectPath; +@property NSString *name; +@property NSString *nickname; +@property NSString *XcodeProjectPath; +@property NSString *settingsPath; +@property NSString *XcodeCappIgnorePath; +@property NSNumber *lastEventID; +@property NSString *PBXModifierScriptPath; +@property NSMutableDictionary *projectPathsForSourcePaths; +@property NSMutableArray *ignoredPathPredicates; +@property NSString *version; +@property NSString *objjIncludePath; +@property NSMutableArray *binaryPaths; +@property NSString *XcodeCappIgnoreContent; +@property BOOL processObjjWarnings; +@property BOOL processCappLint; +@property BOOL processObjj2ObjcSkeleton; +@property BOOL processNib2Cib; +@property XCCCappuccinoProjectStatus status; +@property XCCCappuccinoProjectStatus previousSavedStatus; + + ++ (BOOL)isObjjFile:(NSString *)path; ++ (BOOL)isXibFile:(NSString *)path; ++ (BOOL)isCibFile:(NSString *)path; ++ (BOOL)isHeaderFile:(NSString *)path; ++ (BOOL)isXCCIgnoreFile:(NSString *)path cappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject; ++ (BOOL)isSourceFile:(NSString *)path cappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject; ++ (BOOL)pathMatchesIgnoredPaths:(NSString*)aPath cappuccinoProjectIgnoredPathPredicates:(NSMutableArray*)cappuccinoProjectIgnoredPathPredicates; ++ (BOOL)shouldIgnoreDirectoryNamed:(NSString *)filename; ++ (void)watchSymlinkedDirectoriesAtPath:(NSString *)projectPath pathsToWatch:(NSMutableArray *)pathsToWatch cappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject; ++ (NSArray *)defaultBinaryPaths; ++ (NSArray *)parseIgnorePaths:(NSArray *)paths basePath:(NSString *)basePath; ++ (NSArray *)getPathsToWatchForCappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject; + +- (instancetype)initWithPath:(NSString*)aPath; +- (void)reinitialize; +- (void)saveSettings; +- (void)reloadXcodeCappIgnoreFile; + +- (NSString *)projectRelativePathForPath:(NSString *)path; +- (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path; +- (NSString *)sourcePathForShadowPath:(NSString *)path; +- (NSString *)projectPathForSourcePath:(NSString *)path; +- (NSString *)flattenedXcodeSupportFileNameForPath:(NSString *)aPath; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m new file mode 100644 index 000000000..ffedcf1f4 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m @@ -0,0 +1,475 @@ +// +// CappuccinoProject.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/6/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#include + +#import "XCCCappuccinoProject.h" +#import "XCCPath.h" + +static NSArray * XCCDefaultBinaryPaths; +static NSDictionary* XCCCappuccinoProjectDefaultSettings; +static NSString * const XCCSlashReplacement = @"::"; + +static NSPredicate * XCCDirectoriesToIgnorePredicate = nil; +static NSString * const XCCDirectoriesToIgnorePattern = @"^(?:Build|F(?:rameworks|oundation)|AppKit|Objective-J|(?:Browser|CommonJS)\\.environment|Resources|XcodeSupport|.+\\.xcodeproj)$"; + +static NSArray *XCCCappuccinoProjectDefaultIgnoredPaths = nil; + +NSString * const XCCCappuccinoProcessCappLintKey = @"XCCCappuccinoProcessCappLintKey"; +NSString * const XCCCappuccinoProcessObjjKey = @"XCCCappuccinoProcessObjjKey"; +NSString * const XCCCappuccinoProcessNib2CibKey = @"XCCCappuccinoProcessNib2CibKey"; +NSString * const XCCCappuccinoProcessObjj2ObjcSkeletonKey = @"XCCCappuccinoProcessObjj2ObjcSkeletonKey"; +NSString * const XCCCompatibilityVersionKey = @"XCCCompatibilityVersion"; +NSString * const XCCCappuccinoProjectBinPathsKey = @"XCCCappuccinoProjectBinPathsKey"; +NSString * const XCCCappuccinoObjjIncludePathKey = @"XCCCappuccinoObjjIncludePathKey"; +NSString * const XCCCappuccinoProjectNicknameKey = @"XCCCappuccinoProjectNicknameKey"; +NSString * const XCCCappuccinoProjectPreviousStatusKey = @"XCCCappuccinoProjectPreviousStatusKey"; +NSString * const XCCCappuccinoProjectLastEventIDKey = @"XCCCappuccinoProjectLastEventIDKey"; + + + + +@implementation XCCCappuccinoProject + +@synthesize XcodeCappIgnoreContent = _XcodeCappIgnoreContent; +@synthesize status = _status; + +#pragma mark - Class methods + ++ (void)initialize +{ + if (self != [XCCCappuccinoProject class]) + return; + + XCCDefaultBinaryPaths = @[[[XCCPath alloc] initWithName:@"~/bin"]]; + + NSNumber *appCompatibilityVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:XCCCompatibilityVersionKey]; + + XCCDirectoriesToIgnorePredicate = [NSPredicate predicateWithFormat:@"SELF matches %@", XCCDirectoriesToIgnorePattern]; + + XCCCappuccinoProjectDefaultSettings = @{XCCCompatibilityVersionKey: appCompatibilityVersion, + XCCCappuccinoProcessCappLintKey: @NO, + XCCCappuccinoProcessObjjKey: @NO, + XCCCappuccinoProcessNib2CibKey: @YES, + XCCCappuccinoProcessObjj2ObjcSkeletonKey: @YES, + XCCCappuccinoProjectBinPathsKey: [XCCDefaultBinaryPaths valueForKeyPath:@"name"], + XCCCappuccinoObjjIncludePathKey: @"", + XCCCappuccinoProjectNicknameKey: @"", + XCCCappuccinoProjectPreviousStatusKey: @0}; + + XCCCappuccinoProjectDefaultIgnoredPaths = @[ + @"Frameworks/*", + @"Build/*", + @"*.xcodeproj/*", + @".XcodeSupport/*", + @"NS_*.j", + @".xcodecapp-ignore", + @"*.git/*", + @".cappenvs/*", + @"main.j", + @"!Frameworks/Sources" + ]; +} + ++ (NSArray*)defaultBinaryPaths +{ + return XCCDefaultBinaryPaths; +} + ++ (BOOL)isObjjFile:(NSString *)path +{ + return [path.pathExtension.lowercaseString isEqual:@"j"]; +} + ++ (BOOL)isCibFile:(NSString *)path +{ + return [path.pathExtension.lowercaseString isEqual:@"cib"]; +} + ++ (BOOL)isHeaderFile:(NSString *)path +{ + return [path.pathExtension.lowercaseString isEqual:@"h"]; +} + ++ (BOOL)isXibFile:(NSString *)path +{ + NSString *extension = path.pathExtension.lowercaseString; + + if ([extension isEqual:@"xib"] || [extension isEqual:@"nib"]) + { + // Xcode creates temp files called ~.xib. Filter those out. + NSString *baseFilename = path.lastPathComponent.stringByDeletingPathExtension; + + return [baseFilename characterAtIndex:baseFilename.length - 1] != '~'; + } + + return NO; +} + ++ (BOOL)isXCCIgnoreFile:(NSString *)path cappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject +{ + return [path isEqualToString:aCappuccinoProject.XcodeCappIgnorePath]; +} + ++ (BOOL)isSourceFile:(NSString *)path cappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject +{ + return ([self isXibFile:path] || [self isObjjFile:path]) && ![self pathMatchesIgnoredPaths:path cappuccinoProjectIgnoredPathPredicates:aCappuccinoProject.ignoredPathPredicates]; +} + ++ (BOOL)shouldIgnoreDirectoryNamed:(NSString *)filename +{ + return [XCCDirectoriesToIgnorePredicate evaluateWithObject:filename]; +} + ++ (BOOL)pathMatchesIgnoredPaths:(NSString*)aPath cappuccinoProjectIgnoredPathPredicates:(NSMutableArray*)cappuccinoProjectIgnoredPathPredicates +{ + BOOL ignore = NO; + + for (NSDictionary *ignoreInfo in cappuccinoProjectIgnoredPathPredicates) + { + BOOL matches = [ignoreInfo[@"predicate"] evaluateWithObject:aPath]; + + if (matches) + ignore = [ignoreInfo[@"exclude"] boolValue]; + } + + return ignore; +} + ++ (NSArray *)parseIgnorePaths:(NSArray *)paths basePath:(NSString *)basePath +{ + NSMutableArray *parsedPaths = [@[] mutableCopy]; + NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet]; + + for (NSString *pattern in paths) + { + if ([pattern stringByTrimmingCharactersInSet:whitespace].length == 0) + continue; + + BOOL exclude = [pattern characterAtIndex:0] != '!'; + NSString *finalPattern = exclude ? pattern : [pattern substringFromIndex:1]; + + NSString *regexPattern = [self globToRegexPattern:[NSString stringWithFormat:@"%@/%@", basePath, finalPattern]]; + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", regexPattern]; + [parsedPaths addObject:@{ @"predicate": predicate, + @"exclude": @(exclude)}]; + } + + return parsedPaths; +} + ++ (NSString *)globToRegexPattern:(NSString *)glob +{ + NSMutableString *regex = [glob mutableCopy]; + + if ([regex characterAtIndex:0] == '!') + [regex deleteCharactersInRange:NSMakeRange(0, 1)]; + + [regex replaceOccurrencesOfString:@"." + withString:@"\\." + options:0 + range:NSMakeRange(0, [regex length])]; + + [regex replaceOccurrencesOfString:@"*" + withString:@".*" + options:0 + range:NSMakeRange(0, [regex length])]; + + // If the glob ends with "/", match that directory and anything below it. + if ([regex characterAtIndex:regex.length - 1] == '/') + [regex replaceCharactersInRange:NSMakeRange(regex.length - 1, 1) withString:@"(?:/.*)?"]; + + return [NSString stringWithFormat:@"^%@$", regex]; +} + ++ (NSArray *)getPathsToWatchForCappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject +{ + NSMutableArray *pathsToWatch = [@[aCappuccinoProject.projectPath] mutableCopy]; + NSArray *otherPathsToWatch = @[@"", @"Frameworks/Debug", @"Frameworks/Source"]; + NSFileManager *fm = [NSFileManager defaultManager]; + + for (NSString *path in otherPathsToWatch) + { + NSString *fullPath = [aCappuccinoProject.projectPath stringByAppendingPathComponent:path]; + + BOOL exists, isDirectory; + exists = [fm fileExistsAtPath:fullPath isDirectory:&isDirectory]; + + if (exists && isDirectory) + [self watchSymlinkedDirectoriesAtPath:path pathsToWatch:pathsToWatch cappuccinoProject:aCappuccinoProject]; + } + + return [pathsToWatch copy]; +} + ++ (void)watchSymlinkedDirectoriesAtPath:(NSString *)projectPath pathsToWatch:(NSMutableArray *)pathsToWatch cappuccinoProject:(XCCCappuccinoProject*)aCappuccinoProject +{ + NSString *fullProjectPath = [aCappuccinoProject.projectPath stringByAppendingPathComponent:projectPath]; + NSError *error = NULL; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSArray *urls = [fm contentsOfDirectoryAtURL:[NSURL fileURLWithPath:fullProjectPath] + includingPropertiesForKeys:@[NSURLIsDirectoryKey, NSURLIsSymbolicLinkKey] + options:NSDirectoryEnumerationSkipsHiddenFiles | NSDirectoryEnumerationSkipsPackageDescendants | NSDirectoryEnumerationSkipsSubdirectoryDescendants + error:&error]; + + for (NSURL *url in urls) + { + NSNumber *isSymlink; + [url getResourceValue:&isSymlink forKey:NSURLIsSymbolicLinkKey error:nil]; + + if (isSymlink.boolValue == NO) + continue; + + NSURL *resolvedURL = [url URLByResolvingSymlinksInPath]; + + if (![resolvedURL checkResourceIsReachableAndReturnError:nil]) + continue; + + NSNumber *isDirectory; + [resolvedURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil]; + + if (isDirectory.boolValue == NO) + continue; + + NSString *path = resolvedURL.path; + NSString *filename = path.lastPathComponent; + + if (![self shouldIgnoreDirectoryNamed:filename] && ![self pathMatchesIgnoredPaths:path cappuccinoProjectIgnoredPathPredicates:aCappuccinoProject.ignoredPathPredicates]) + { + DDLogVerbose(@"Watching symlinked directory: %@", path); + + [pathsToWatch addObject:path]; + } + } +} + + +#pragma mark - Init methods + +- (instancetype)initWithPath:(NSString*)aPath +{ + if (self = [super init]) + { + self.name = [aPath lastPathComponent]; + self.nickname = self.name; + self.projectPath = aPath; + self.PBXModifierScriptPath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"pbxprojModifier.py"]; + self.XcodeProjectPath = [self.projectPath stringByAppendingPathComponent:[[self.projectPath lastPathComponent] stringByAppendingString:@".xcodeproj"]]; + self.XcodeCappIgnorePath = [self.projectPath stringByAppendingPathComponent:@".xcodecapp-ignore"]; + self.supportPath = [self.projectPath stringByAppendingPathComponent:@".XcodeSupport"]; + self.settingsPath = [self.supportPath stringByAppendingPathComponent:@"Info.plist"]; + + [self _loadSettings]; + + [self reloadXcodeCappIgnoreFile]; + + [self reinitialize]; + } + + return self; +} + +- (void)reinitialize +{ + self.projectPathsForSourcePaths = [@{} mutableCopy]; + self.status = XCCCappuccinoProjectStatusStopped; +} + + +#pragma mark - Settings Management + +- (id)_defaultSettings +{ + NSMutableDictionary *defaultSettings = [XCCCappuccinoProjectDefaultSettings mutableCopy]; + + defaultSettings[XCCCappuccinoObjjIncludePathKey] = [NSString stringWithFormat:@"%@/%@", self.projectPath, @"Frameworks/Debug"]; + defaultSettings[XCCCappuccinoProjectNicknameKey] = self.nickname; + + return defaultSettings; +} + +- (void)_loadSettings +{ + self->settings = [[NSDictionary dictionaryWithContentsOfFile:self.settingsPath] mutableCopy]; + + if (!self->settings) + self->settings = [[self _defaultSettings] mutableCopy]; + + NSMutableArray *mutablePaths = [@[] mutableCopy]; + NSArray *paths = self->settings[XCCCappuccinoProjectBinPathsKey]; + + if (paths) + { + for (NSString *name in paths) + { + XCCPath *path = [XCCPath new]; + [path setName:name]; + [mutablePaths addObject:path]; + } + } + else + { + mutablePaths = [[[self class] defaultBinaryPaths] mutableCopy]; + } + + self.binaryPaths = mutablePaths; + self.nickname = self->settings[XCCCappuccinoProjectNicknameKey]; + self.objjIncludePath = self->settings[XCCCappuccinoObjjIncludePathKey]; + self.version = self->settings[XCCCompatibilityVersionKey]; + self.processObjjWarnings = [self->settings[XCCCappuccinoProcessObjjKey] boolValue]; + self.processCappLint = [self->settings[XCCCappuccinoProcessCappLintKey] boolValue]; + self.processObjj2ObjcSkeleton = [self->settings[XCCCappuccinoProcessObjj2ObjcSkeletonKey] boolValue]; + self.processNib2Cib = [self->settings[XCCCappuccinoProcessNib2CibKey] boolValue]; + self.previousSavedStatus = [self->settings[XCCCappuccinoProjectPreviousStatusKey] intValue]; + + if (self->settings[XCCCappuccinoProjectLastEventIDKey]) + self.lastEventID = self->settings[XCCCappuccinoProjectLastEventIDKey]; +} + +- (void)_writeSettings +{ + NSData *data = [NSPropertyListSerialization dataFromPropertyList:self->settings format:NSPropertyListXMLFormat_v1_0 errorDescription:nil]; + + [data writeToFile:self.settingsPath atomically:YES]; +} + +- (void)saveSettings +{ + self->settings[XCCCappuccinoProjectBinPathsKey] = [self.binaryPaths valueForKeyPath:@"name"]; + self->settings[XCCCappuccinoObjjIncludePathKey] = self.objjIncludePath; + self->settings[XCCCappuccinoProjectNicknameKey] = self.nickname; + self->settings[XCCCompatibilityVersionKey] = self.version; + self->settings[XCCCappuccinoProcessObjjKey] = @(self.processObjjWarnings); + self->settings[XCCCappuccinoProcessCappLintKey] = @(self.processCappLint); + self->settings[XCCCappuccinoProcessObjj2ObjcSkeletonKey] = @(self.processObjj2ObjcSkeleton); + self->settings[XCCCappuccinoProcessNib2CibKey] = @(self.processNib2Cib); + self->settings[XCCCappuccinoProjectPreviousStatusKey] = [NSNumber numberWithInt:self.status]; + + if ([self.lastEventID boolValue]) + self->settings[XCCCappuccinoProjectLastEventIDKey] = self.lastEventID; + + [self _writeXcodeCappIgnoreFile]; + [self _writeSettings]; +} + + +#pragma mark - XcodeCapp Ignore + +- (void)_writeXcodeCappIgnoreFile +{ + NSData *data = [NSPropertyListSerialization dataFromPropertyList:self->settings format:NSPropertyListXMLFormat_v1_0 errorDescription:nil]; + + [data writeToFile:self.settingsPath atomically:YES]; + + NSFileManager *fm = [NSFileManager defaultManager]; + + if ([self.XcodeCappIgnoreContent length]) + [self.XcodeCappIgnoreContent writeToFile:self.XcodeCappIgnorePath atomically:YES encoding:NSASCIIStringEncoding error:nil]; + else if ([fm fileExistsAtPath:self.XcodeCappIgnorePath]) + [fm removeItemAtPath:self.XcodeCappIgnorePath error:nil]; +} + +- (void)_updateXcodeCappIgnorePredicates +{ + self.ignoredPathPredicates = [@[] mutableCopy]; + + @try + { + NSMutableArray *ignoredPatterns = [@[] mutableCopy]; + + for (NSString *pattern in XCCCappuccinoProjectDefaultIgnoredPaths) + [ignoredPatterns addObject:pattern]; + + for (NSString *pattern in [self.XcodeCappIgnoreContent componentsSeparatedByString:@"\n"]) + if ([pattern length]) + [ignoredPatterns addObject:pattern]; + + NSArray *parsedPaths = [XCCCappuccinoProject parseIgnorePaths:ignoredPatterns basePath:self.projectPath]; + [self.ignoredPathPredicates addObjectsFromArray:parsedPaths]; + + DDLogVerbose(@"Content of xcodecapp-ignorepath correctly updated %@", self.ignoredPathPredicates); + } + @catch(NSException *exception) + { + DDLogVerbose(@"Content of xcodecapp-ignorepath does not math the expected input"); + self.ignoredPathPredicates = [@[] mutableCopy]; + } +} + +- (void)reloadXcodeCappIgnoreFile +{ + NSFileManager *fm = [NSFileManager defaultManager]; + + if ([fm fileExistsAtPath:self.XcodeCappIgnorePath]) + self.XcodeCappIgnoreContent = [NSString stringWithContentsOfFile:self.XcodeCappIgnorePath encoding:NSASCIIStringEncoding error:nil]; + else + self.XcodeCappIgnoreContent = @""; //otherwise we prepare the xcc ignore with the default values +} + + +#pragma mark Paths Management + +- (NSString *)projectRelativePathForPath:(NSString *)path +{ + return [path substringFromIndex:self.projectPath.length + 1]; +} + +- (NSString *)projectPathForSourcePath:(NSString *)path +{ + NSString *base = path.stringByDeletingLastPathComponent; + NSString *projectPath = self.projectPathsForSourcePaths[base]; + + return projectPath ? [projectPath stringByAppendingPathComponent:path.lastPathComponent] : path; +} + +- (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path +{ + if (path.isAbsolutePath) + path = [self projectRelativePathForPath:path]; + + NSString *filename = [path.stringByDeletingPathExtension stringByReplacingOccurrencesOfString:@"/" withString:XCCSlashReplacement]; + + return [self.supportPath stringByAppendingPathComponent:filename]; +} + +- (NSString *)sourcePathForShadowPath:(NSString *)path +{ + NSString *filename = [path stringByReplacingOccurrencesOfString:XCCSlashReplacement withString:@"/"]; + filename = [filename.stringByDeletingPathExtension stringByAppendingPathExtension:@"j"]; + + return [self.projectPath stringByAppendingPathComponent:filename]; +} + +- (NSString *)flattenedXcodeSupportFileNameForPath:(NSString *)aPath +{ + NSString *relativePath = [[aPath stringByDeletingPathExtension] stringByReplacingOccurrencesOfString:[self.projectPath stringByAppendingString:@"/"] withString:@""]; + + return [relativePath stringByReplacingOccurrencesOfString:@"/" withString:XCCSlashReplacement]; +} + + +#pragma mark - Custom Getters and Setters + +- (NSString *)XcodeCappIgnoreContent +{ + return _XcodeCappIgnoreContent; +} + +- (void)setXcodeCappIgnoreContent:(NSString *)XcodeCappIgnoreContent +{ + if ([XcodeCappIgnoreContent isEqualToString:_XcodeCappIgnoreContent]) + return; + + [self willChangeValueForKey:@"XcodeCappIgnoreContent"]; + _XcodeCappIgnoreContent = XcodeCappIgnoreContent; + [self _updateXcodeCappIgnorePredicates]; + [self didChangeValueForKey:@"XcodeCappIgnoreContent"]; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.h b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.h new file mode 100644 index 000000000..c1616306b --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.h @@ -0,0 +1,58 @@ +// +// CappuccinoProjectController.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/7/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCAbstractOperation; +@class XCCCappuccinoProject; +@class XCCTaskLauncher; +@class XCCMainController; +@class XCCPPXOperation; +@class XCCSourcesFinderOperation; + + +@interface XCCCappuccinoProjectController : NSObject +{ + BOOL isListeningToOperationNotifications; + XCCTaskLauncher *taskLauncher; + NSOperationQueue *operationQueue; + FSEventStreamRef stream; + NSMutableDictionary *sourceProcessingOperations; + XCCPPXOperation *pendingPBXOperation; + XCCSourcesFinderOperation *currentFindSourceOperation; +} + +@property CGFloat operationsProgress; +@property NSInteger numberOfErrors; +@property NSInteger operationsTotal; +@property NSMutableDictionary *errors; +@property NSInteger operationsRemaining; +@property NSString *operationsRemainingString; +@property NSString *errorsCountString; +@property XCCCappuccinoProject *cappuccinoProject; +@property XCCMainController *mainXcodeCappController; + +- (instancetype)initWithPath:(NSString*)aPath controller:(id)aController; +- (void)reinitializeProjectFromSettings; +- (void)applicationIsClosing; +- (void)cleanUpBeforeDeletion; +- (void)operationDidStart:(XCCAbstractOperation*)anOperation type:(NSString*)aType userInfo:(NSDictionary*)userInfo; +- (void)operationDidEnd:(XCCAbstractOperation*)anOperation type:(NSString*)aType userInfo:(NSDictionary*)userInfo; +- (void)launchEditorForPath:(NSString*)path line:(NSInteger)line; +- (void)removeAllOperationErrors; +@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSArray *projectRelatedOperations; +; +- (IBAction)cancelAllOperations:(id)aSender; +- (IBAction)resetProject:(id)aSender; +- (IBAction)openProjectInXcode:(id)sender; +- (IBAction)openProjectInFinder:(id)sender; +- (IBAction)openProjectInEditor:(id)sender; +- (IBAction)openProjectInTerminal:(id)sender; +- (IBAction)switchProjectListeningStatus:(id)sender; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.m b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.m new file mode 100644 index 000000000..d49fca923 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.m @@ -0,0 +1,1272 @@ +// +// CappuccinoProjectController.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/7/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "AppDelegate.h" +#import "XCCCappuccinoProjectController.h" +#import "XCCCappuccinoProject.h" +#import "XCCFSEventLogUtils.h" +#import "XCCSourcesFinderOperation.h" +#import "XCCPPXOperation.h" +#import "XCCSourceProcessingOperation.h" +#import "XCCMainController.h" +#import "XCCOperationDataView.h" +#import "XCCOperationError.h" +#import "XCCOperationErrorDataView.h" +#import "XCCOperationErrorHeaderDataView.h" +#import "XCCTaskLauncher.h" +#import "XCCUserDefaults.h" +#import "XcodeProjectCloser.h" +#import "XCCOperationsViewController.h" +#import "XCCErrorsViewController.h" + +static FSEventStreamCreateFlags const XCCProjectControllerFSEventFlags = kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagWatchRoot + | kFSEventStreamCreateFlagIgnoreSelf | kFSEventStreamCreateFlagNoDefer | kFSEventStreamCreateFlagFileEvents; +typedef NS_ENUM(NSInteger, XCCLineSpecifier) +{ + kLineSpecifierNone, + kLineSpecifierColon, + kLineSpecifierMinusL, + kLineSpecifierPlus +}; + + +@interface XCCCappuccinoProjectController () +- (void)_handleFSEventsWithPaths:(NSArray *)paths flags:(const FSEventStreamEventFlags[])eventFlags ids:(const FSEventStreamEventId[])eventIds; +@end + +void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) +{ + XCCCappuccinoProjectController *controller = (__bridge XCCCappuccinoProjectController *)userData; + NSArray *paths = (__bridge NSArray *)eventPaths; + + [controller _handleFSEventsWithPaths:paths flags:eventFlags ids:eventIds]; +} + + + +@implementation XCCCappuccinoProjectController + +@synthesize numberOfErrors = _numberOfErrors; + +#pragma mark - Init methods + +- (instancetype)initWithPath:(NSString*)aPath controller:(id)aController +{ + if (self = [super init]) + { + [self _startListeningToOperationsNotifications]; + + self.cappuccinoProject = [[XCCCappuccinoProject alloc] initWithPath:aPath]; + self.mainXcodeCappController = aController; + self->sourceProcessingOperations = [@{} mutableCopy]; + self->operationQueue = [[NSApp delegate] mainOperationQueue]; + + [self _reinitializeProjectController]; + } + + return self; +} + +- (void)_reinitializeProjectController +{ + [self.cappuccinoProject reinitialize]; + [self _reinitializeOperationsCounters]; + [self _reinitializeOperationErrors]; + [self _prepareXcodeSupport]; +} + +- (void)_reinitializeTaskLauncher +{ + NSArray *binaryPaths = @[]; + + if ([self.cappuccinoProject.binaryPaths count]) + binaryPaths = [self.cappuccinoProject.binaryPaths valueForKeyPath:@"name"]; + + self->taskLauncher = [[XCCTaskLauncher alloc] initWithEnvironmentPaths:binaryPaths]; + + if (!self->taskLauncher.isValid) + { + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + + NSRunAlertPanel( + self.cappuccinoProject.nickname, + @"XcodeCapp was unable to find all necessary executables in your environment:\n\n" + @"%@\n\n" + @"You certainly need to change the binary paths in the project settings.", + @"OK", + nil, + nil, + [self->taskLauncher.executables componentsJoinedByString:@", "]); + + [self _reinitializeProjectController]; + } +} + + +#pragma mark - Project State Management + +- (void)_startListeningToProject +{ + if (![self _projectPathExists] || self.cappuccinoProject.status == XCCCappuccinoProjectStatusListening) + return; + + DDLogInfo(@"Start to listen project: %@", self.cappuccinoProject.projectPath); + + [self _synchronizeXcodeSupport]; + + if (self->taskLauncher.isValid) + { + [self _startFSEventStream]; + + // this is needed in order to ensure we get a FS event, so we actually get a valid last event ID. + [self->taskLauncher runTaskWithCommand:@"touch" arguments:@[self.cappuccinoProject.settingsPath] returnType:kTaskReturnTypeNone]; + + self.cappuccinoProject.status = XCCCappuccinoProjectStatusListening; + } + + [self.cappuccinoProject saveSettings]; +} + +- (void)_stopListeningToProject +{ + if (self.cappuccinoProject.status == XCCCappuccinoProjectStatusStopped) + return; + + [self _cancelAllProjectRelatedOperations]; + [self _stopFSEventStream]; + + [self.mainXcodeCappController.errorsViewController cleanProjectErrors:self]; + + self.cappuccinoProject.status = XCCCappuccinoProjectStatusStopped; + [self.cappuccinoProject saveSettings]; +} + + +#pragma mark - XcodeSupport Management + +- (BOOL)_projectPathExists +{ + NSFileManager *fm = [NSFileManager defaultManager]; + + if (![fm fileExistsAtPath:self.cappuccinoProject.projectPath isDirectory:nil]) + { + NSRunAlertPanel(@"The project can’t be located.", @"It seems the project moved while XcodeCapp was not running.", @"Remove Project", nil, nil); + + [self.mainXcodeCappController unmanageCappuccinoProjectController:self]; + return NO; + } + + return YES; +} + +- (void)_synchronizeXcodeSupport +{ + DDLogInfo(@"Synchronize project: %@", self.cappuccinoProject.projectPath); + + [self _reinitializeProjectController]; + [self _reinitializeTaskLauncher]; + + if (!self->taskLauncher.isValid) + return; + + [self _synchronizeXcodeSupportFromPath:@""]; +} + +- (void)_prepareXcodeSupport +{ + NSFileManager *fm = [NSFileManager defaultManager]; + + BOOL projectExists, projectIsDirectory; + projectExists = [fm fileExistsAtPath:self.cappuccinoProject.XcodeProjectPath isDirectory:&projectIsDirectory]; + + BOOL supportExists, supportIsDirectory; + supportExists = [fm fileExistsAtPath:self.cappuccinoProject.supportPath isDirectory:&supportIsDirectory]; + + if (!projectExists || !projectIsDirectory || !supportExists) + [self _createXcodeProject]; + + if (!supportExists || !supportIsDirectory || !projectExists || ![self _isXcodeSupportCompatible]) + [self _createXcodeSupportDirectory]; +} + +- (BOOL)_isXcodeSupportCompatible +{ + double appCompatibilityVersion = [[[NSBundle mainBundle] objectForInfoDictionaryKey:XCCCompatibilityVersionKey] doubleValue]; + + NSNumber *projectCompatibilityVersion = @([self.cappuccinoProject.version intValue]); + + if (projectCompatibilityVersion == nil) + { + DDLogVerbose(@"No compatibility version in project"); + return NO; + } + + DDLogVerbose(@"XcodeCapp/project compatibility version: %0.1f/%0.1f", projectCompatibilityVersion.doubleValue, appCompatibilityVersion); + + return projectCompatibilityVersion.doubleValue >= appCompatibilityVersion; +} + +- (void)_createXcodeProject +{ + [self _removeXcodeProject]; + + NSFileManager *fm = [NSFileManager defaultManager]; + + [fm createDirectoryAtPath:self.cappuccinoProject.XcodeProjectPath withIntermediateDirectories:YES attributes:nil error:nil]; + + NSString *pbxPath = [self.cappuccinoProject.XcodeProjectPath stringByAppendingPathComponent:@"project.pbxproj"]; + + [fm copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"project" ofType:@"pbxproj"] toPath:pbxPath error:nil]; + + NSMutableString *content = [NSMutableString stringWithContentsOfFile:pbxPath encoding:NSUTF8StringEncoding error:nil]; + + [content writeToFile:pbxPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + DDLogInfo(@"Xcode support project created at: %@", self.cappuccinoProject.XcodeProjectPath); +} + +- (void)_removeXcodeProject +{ + NSFileManager *fm = [NSFileManager defaultManager]; + + if ([fm fileExistsAtPath:self.cappuccinoProject.XcodeProjectPath]) + [fm removeItemAtPath:self.cappuccinoProject.XcodeProjectPath error:nil]; +} + +- (void)_createXcodeSupportDirectory +{ + [self _removeXcodeSupportDirectory]; + + [[NSFileManager defaultManager] createDirectoryAtPath:self.cappuccinoProject.supportPath withIntermediateDirectories:YES attributes:nil error:nil]; + + [self.cappuccinoProject saveSettings]; + + DDLogInfo(@".XcodeSupport directory created at: %@", self.cappuccinoProject.supportPath); +} + +- (void)_removeXcodeSupportDirectory +{ + [XcodeProjectCloser closeXcodeProjectForProject:self.cappuccinoProject.projectPath]; + + NSFileManager *fm = [NSFileManager defaultManager]; + + if ([fm fileExistsAtPath:self.cappuccinoProject.supportPath]) + [fm removeItemAtPath:self.cappuccinoProject.supportPath error:nil]; +} + +- (void)_synchronizeXcodeSupportFromPath:(NSString *)path +{ + self->operationQueue.suspended = YES; + [self _cancelCurrentSourceFinderOperation]; + [self _scheduleFinderSourceOperationForPath:path]; + self->operationQueue.suspended = NO; +} + +- (void)_removeXcodeSupportOrphanFiles +{ + NSArray *subpaths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.cappuccinoProject.supportPath error:nil]; + NSMutableArray *orphanFiles = [@[] mutableCopy]; + NSFileManager *fm = [NSFileManager defaultManager]; + + for (NSString *path in subpaths) + { + if ([XCCCappuccinoProject isHeaderFile:path] && ![path.lastPathComponent isEqualToString:@"xcc_general_include.h"]) + { + NSString *sourcePath = [self.cappuccinoProject sourcePathForShadowPath:path]; + + if (![fm fileExistsAtPath:sourcePath]) + [orphanFiles addObject:sourcePath]; + } + } + + NSMutableArray *pathsToRemove = [@[] mutableCopy]; + + for (NSString *sourcePath in orphanFiles) + { + NSString *shadowBasePath = [self.cappuccinoProject shadowBasePathForProjectSourcePath:sourcePath]; + NSString *shadowHeaderPath = [shadowBasePath stringByAppendingPathExtension:@"h"]; + NSString *shadowImplementationPath = [shadowBasePath stringByAppendingPathExtension:@"m"]; + + [fm removeItemAtPath:shadowHeaderPath error:nil]; + [fm removeItemAtPath:shadowImplementationPath error:nil]; + + [self removeOperationErrorsRelatedToSourcePath:sourcePath errorType:XCCDefaultOperationErrorType]; + + [pathsToRemove addObject:sourcePath]; + } + + [self.mainXcodeCappController.errorsViewController reload]; + + if (self->pendingPBXOperation) + [self->pendingPBXOperation registerPathsToRemoveFromPBX:pathsToRemove]; + else + [self _schedulePBXOperationWithPathsToAdd:nil pathsToRemove:pathsToRemove]; + +} + +- (void)_updateXcodeSupportFilesWithModifiedPaths:(NSArray *)modifiedPaths +{ + DDLogVerbose(@"Modified files: %@", modifiedPaths); + + for (NSString *path in modifiedPaths) + { + if (![[NSFileManager defaultManager] fileExistsAtPath:path]) + continue; + + [self _scheduleSourceProcessingOperationForPath:path]; + } + + [self _removeXcodeSupportOrphanFiles]; + + [self _updateOperationsProgress]; +} + +- (void)_updateXcodeSupportFilesWithRenamedDirectories:(NSArray *)directories +{ + DDLogVerbose(@"Renamed directories: %@", directories); + + NSFileManager *fm = [NSFileManager defaultManager]; + + for (NSString *directory in directories) + { + if ([directory isEqualToString:self.cappuccinoProject.projectPath]) + continue; + + if ([fm fileExistsAtPath:directory]) + { + if ([directory hasPrefix:self.cappuccinoProject.projectPath]) + [self _synchronizeXcodeSupportFromPath:[self.cappuccinoProject projectRelativePathForPath:directory]]; + else + { + [self _synchronizeXcodeSupportFromPath:@""]; + break; + } + } + } + + [self _removeXcodeSupportOrphanFiles]; +} + + +#pragma mark - Notifications + +- (void)_startListeningToOperationsNotifications +{ + if (self->isListeningToOperationNotifications) + return; + + self->isListeningToOperationNotifications = YES; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + + [center addObserver:self selector:@selector(_didReceiveConversionDidStartNotification:) name:XCCConversionDidStartNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveConversionDidEndNotification:) name:XCCConversionDidEndNotification object:nil]; + + [center addObserver:self selector:@selector(_didReceiveSourcesFinderOperationDidStartNotification:) name:XCCSourcesFinderOperationDidStartNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveSourcesFinderOperationDidEndNotification:) name:XCCSourcesFinderOperationDidEndNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveNeedSourceToProjectPathMappingNotification:) name:XCCNeedSourceToProjectPathMappingNotification object:nil]; + + [center addObserver:self selector:@selector(_didReceiveObjj2ObjcSkeletonDidStartNotification:) name:XCCObjj2ObjcSkeletonDidStartNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveObjj2ObjcSeleketonDidGenerateErrorNotification:) name:XCCObjj2ObjcSkeletonDidGenerateErrorNotification object:nil]; + + [center addObserver:self selector:@selector(_didReceiveNib2CibDidStartNotifcation:) name:XCCNib2CibDidStartNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveNib2CibDidGenerateErrorNotification:) name:XCCNib2CibDidGenerateErrorNotification object:nil]; + + [center addObserver:self selector:@selector(_didReceiveObjjDidStartNotification:) name:XCCObjjDidStartNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveObjjDidGenerateErrorNotification:) name:XCCObjjDidGenerateErrorNotification object:nil]; + + [center addObserver:self selector:@selector(_didReceiveCappLintDidStartNotification:) name:XCCCappLintDidStartNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveCappLintDidGenerateErrorNotification:) name:XCCCappLintDidGenerateErrorNotification object:nil]; + + [center addObserver:self selector:@selector(_didReceiveUpdatePbxFileDidStartNotification:) name:XCCPBXOperationDidStartNotification object:nil]; + [center addObserver:self selector:@selector(_didReceiveUpdatePbxFileDidEndNotification:) name:XCCPBXOperationDidEndNotification object:nil]; +} + +- (void)_stopListeningToOperationsNotifications +{ + if (!self->isListeningToOperationNotifications) + return; + + self->isListeningToOperationNotifications = NO; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + + [center removeObserver:self name:XCCConversionDidStartNotification object:nil]; + [center removeObserver:self name:XCCConversionDidEndNotification object:nil]; + + [center removeObserver:self name:XCCSourcesFinderOperationDidStartNotification object:nil]; + [center removeObserver:self name:XCCSourcesFinderOperationDidEndNotification object:nil]; + [center removeObserver:self name:XCCNeedSourceToProjectPathMappingNotification object:nil]; + + [center removeObserver:self name:XCCObjj2ObjcSkeletonDidStartNotification object:nil]; + [center removeObserver:self name:XCCObjj2ObjcSkeletonDidGenerateErrorNotification object:nil]; + + [center removeObserver:self name:XCCNib2CibDidStartNotification object:nil]; + [center removeObserver:self name:XCCNib2CibDidGenerateErrorNotification object:nil]; + + [center removeObserver:self name:XCCObjjDidStartNotification object:nil]; + [center removeObserver:self name:XCCObjjDidGenerateErrorNotification object:nil]; + + [center removeObserver:self name:XCCCappLintDidStartNotification object:nil]; + [center removeObserver:self name:XCCCappLintDidGenerateErrorNotification object:nil]; + + [center removeObserver:self name:XCCPBXOperationDidStartNotification object:nil]; + [center removeObserver:self name:XCCPBXOperationDidEndNotification object:nil]; + +} + +- (BOOL)_doesNotificationBelongToCurrentProject:(NSNotification *)note +{ + return note.userInfo[@"cappuccinoProject"] == self.cappuccinoProject; +} + +- (void)_didReceiveConversionDidStartNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self _schedulePBXOperation]; + [self->pendingPBXOperation registerPathsToAddInPBX:@[note.userInfo[@"sourcePath"]]]; + + [self operationDidStart:note.object type:note.name userInfo:note.userInfo]; +} + +- (void)_didReceiveConversionDidEndNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self.mainXcodeCappController reloadTotalNumberOfErrors]; + + [self operationDidEnd:note.object type:note.name userInfo:note.userInfo]; +} + +- (void)_didReceiveSourcesFinderOperationDidStartNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self operationDidStart:note.object type:note.name userInfo:note.userInfo]; +} + +- (void)_didReceiveSourcesFinderOperationDidEndNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self operationDidEnd:note.object type:note.name userInfo:note.userInfo]; +} + +- (void)_didReceiveNeedSourceToProjectPathMappingNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + self.cappuccinoProject.projectPathsForSourcePaths[note.userInfo[@"sourcePath"]] = note.userInfo[@"projectPath"]; +} + +- (void)_didReceiveObjj2ObjcSkeletonDidStartNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self removeOperationErrorsRelatedToSourcePath:note.userInfo[@"sourcePath"] errorType:XCCObjj2ObjcSkeletonOperationErrorType]; +} + +- (void)_didReceiveObjj2ObjcSeleketonDidGenerateErrorNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + for (XCCOperationError *operationError in [XCCOperationError operationErrorsFromObjj2ObjcSkeletonInfo:note.userInfo]) + [self addOperationError:operationError]; +} + +- (void)_didReceiveNib2CibDidStartNotifcation:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self removeOperationErrorsRelatedToSourcePath:note.userInfo[@"sourcePath"] errorType:XCCNib2CibOperationErrorType]; +} + +- (void)_didReceiveNib2CibDidGenerateErrorNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self addOperationError:[XCCOperationError operationErrorFromNib2CibInfo:note.userInfo]]; +} + +- (void)_didReceiveObjjDidStartNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self removeOperationErrorsRelatedToSourcePath:note.userInfo[@"sourcePath"] errorType:XCCObjjOperationErrorType]; +} + +- (void)_didReceiveObjjDidGenerateErrorNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + for (XCCOperationError *operationError in [XCCOperationError operationErrorsFromObjjInfo:note.userInfo]) + [self addOperationError:operationError]; +} + +- (void)_didReceiveCappLintDidStartNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self removeOperationErrorsRelatedToSourcePath:note.userInfo[@"sourcePath"] errorType:XCCCappLintOperationErrorType]; +} + +- (void)_didReceiveCappLintDidGenerateErrorNotification:(NSNotification *)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + for (XCCOperationError *operationError in [XCCOperationError operationErrorsFromCappLintInfo:note.userInfo]) + [self addOperationError:operationError]; +} + +- (void)_didReceiveUpdatePbxFileDidStartNotification:(NSNotification*)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self operationDidStart:note.object type:note.name userInfo:note.userInfo]; +} + +- (void)_didReceiveUpdatePbxFileDidEndNotification:(NSNotification*)note +{ + if (![self _doesNotificationBelongToCurrentProject:note]) + return; + + [self operationDidEnd:note.object type:note.name userInfo:note.userInfo]; +} + + +#pragma mark - OperationError Management + +- (void)addOperationError:(XCCOperationError *)operationError +{ + if (!operationError.fileName) + operationError.fileName = @"/No Filename"; + + [self willChangeValueForKey:@"errors"]; + + if (!self.errors[operationError.fileName]) + self.errors[operationError.fileName] = [@[] mutableCopy]; + + [self.errors[operationError.fileName] addObject:operationError]; + + [self didChangeValueForKey:@"errors"]; + self.numberOfErrors++; + + [self _notifyUserWithOperationError:operationError]; +} + +- (void)removeOperationError:(XCCOperationError *)operationError +{ + if (!operationError.fileName) + operationError.fileName = @"/No Filename"; + + [self willChangeValueForKey:@"errors"]; + + [self.errors[operationError.fileName] removeObject:operationError]; + + if (![self.errors[operationError.fileName] count]) + [self.errors removeObjectForKey:operationError.fileName]; + + [self didChangeValueForKey:@"errors"]; + self.numberOfErrors--; +} + +- (void)removeAllOperationErrors +{ + [self willChangeValueForKey:@"errors"]; + [self.errors removeAllObjects]; + [self didChangeValueForKey:@"errors"]; + self.numberOfErrors = 0; +} + +- (void)removeOperationErrorsRelatedToSourcePath:(NSString *)aPath errorType:(int)anErrorType +{ + NSMutableArray *errorsToRemove = [@[] mutableCopy]; + + for (XCCOperationError *operationError in self.errors[aPath]) + if ([operationError.fileName isEqualToString:aPath] && (operationError.errorType == anErrorType || anErrorType == XCCDefaultOperationErrorType)) + [errorsToRemove addObject:operationError]; + + for (XCCOperationError *error in errorsToRemove) + [self removeOperationError:error]; +} + +- (NSInteger)numberOfErrors +{ + return _numberOfErrors; +} + +- (void)setNumberOfErrors:(NSInteger)numberOfErrors +{ + if (numberOfErrors == _numberOfErrors) + return; + + [self willChangeValueForKey:@"numberOfErrors"]; + _numberOfErrors = numberOfErrors; + [self didChangeValueForKey:@"numberOfErrors"]; + + if (!_numberOfErrors) + self.errorsCountString = @""; + else + { + NSString *plural1 = self.numberOfErrors > 1 ? @"s" : @""; + NSString *plural2 = self.errors.count > 1 ? @"s" : @""; + self.errorsCountString = [NSString stringWithFormat:@"%d issue%@ in %d file%@", (int)self.numberOfErrors, plural1, (int)self.errors.count, plural2]; + } +} + +- (void)_reinitializeOperationErrors +{ + self.errors = [@{} mutableCopy]; + self.numberOfErrors = 0; +} + + +#pragma mark - Operation Management + +- (void)operationDidStart:(XCCAbstractOperation*)anOperation type:(NSString *)aType userInfo:(NSDictionary*)userInfo +{ + [self.mainXcodeCappController.operationsViewController reload]; + [self.mainXcodeCappController.errorsViewController reload]; +} + +- (void)operationDidEnd:(XCCAbstractOperation*)anOperation type:(NSString *)aType userInfo:(NSDictionary*)userInfo +{ + [self _dequeueOperation:anOperation]; + + if ([aType isEqualToString:XCCSourcesFinderOperationDidEndNotification]) + { + self->currentFindSourceOperation = nil; + [self _updateXcodeSupportFilesWithModifiedPaths:userInfo[@"sourcePaths"]]; + } + else if ([aType isEqualToString:XCCPBXOperationDidEndNotification]) + { + self->pendingPBXOperation = nil; + } + + if (self->stream) + self.cappuccinoProject.status = XCCCappuccinoProjectStatusListening; + + [self.mainXcodeCappController.operationsViewController reload]; + [self.mainXcodeCappController.errorsViewController reload]; +} + +- (void)_reinitializeOperationsCounters +{ + self.operationsProgress = 1.0; + self.operationsTotal = 0; + self.operationsRemaining = 0; +} + +- (void)_updateOperationsProgress +{ + if (!self.operationsTotal) + { + self.operationsRemaining = 0; + self.operationsProgress = 1.0; + } + else + { + self.operationsRemaining = (long)[[self projectRelatedOperations] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"cancelled = NO"]].count; + self.operationsProgress = 1.0 - (float)self.operationsRemaining / (float)self.operationsTotal; + } + + self.operationsRemainingString = [NSString stringWithFormat:@"%d total operations, %d remaining", (int)self.operationsTotal, (int)self.operationsRemaining]; + + if (self.operationsProgress == 1.0) + [self _reinitializeOperationsCounters]; +} + +- (void)_registerSourceProcessingOperation:(XCCSourceProcessingOperation *)sourceOperation +{ + if (!self->sourceProcessingOperations[sourceOperation.sourcePath]) + self->sourceProcessingOperations[sourceOperation.sourcePath] = [@[] mutableCopy]; + + NSMutableArray *operations = self->sourceProcessingOperations[sourceOperation.sourcePath]; + + if (![operations containsObject:sourceOperation]) + [operations addObject:sourceOperation]; +} + +- (void)_unregisterSourceProcessingOperation:(XCCSourceProcessingOperation *)sourceOperation +{ + [self->sourceProcessingOperations[sourceOperation.sourcePath] removeObject:sourceOperation]; + + if (!self->sourceProcessingOperations[sourceOperation.sourcePath]) + [self->sourceProcessingOperations removeObjectForKey:sourceOperation.sourcePath]; +} + +- (NSArray *)_sourceProcessingOperationsForPath:(NSString *)path +{ + return self->sourceProcessingOperations[path]; +} + +- (void)_enqueueOperation:(NSOperation *)anOperation +{ + if ([self->operationQueue.operations containsObject:anOperation]) + return; + + [self->operationQueue addOperation:anOperation]; + + if ([anOperation isKindOfClass:[XCCSourceProcessingOperation class]]) + [self _registerSourceProcessingOperation:(XCCSourceProcessingOperation *)anOperation]; + + self.operationsTotal++; + [self _updateOperationsProgress]; +} + +- (void)_dequeueOperation:(NSOperation *)anOperation +{ + if ([anOperation isKindOfClass:[XCCSourceProcessingOperation class]]) + [self _unregisterSourceProcessingOperation:(XCCSourceProcessingOperation *)anOperation]; + + [self _updateOperationsProgress]; +} + +- (void)_cancelSourceOperationsForPath:(NSString *)path +{ + NSArray *operations = [self _sourceProcessingOperationsForPath:path]; + + for (NSOperation * operation in operations) + { + [operation cancel]; + [self _dequeueOperation:operation]; + } +} + +- (void)_cancelAllProjectRelatedOperations +{ + [[self projectRelatedOperations] makeObjectsPerformSelector:@selector(cancel)]; + self->sourceProcessingOperations = [@{} mutableCopy]; + self->pendingPBXOperation = nil; +} + +- (NSArray*)projectRelatedOperations +{ + return [self->operationQueue.operations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"cappuccinoProject.projectPath == %@", self.cappuccinoProject.projectPath]]; +} + +- (NSArray *)projectRelatedSourceProcessingOperations +{ + return [[self projectRelatedOperations] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [XCCSourceProcessingOperation class]]]; +} + +- (void)_cancelCurrentSourceFinderOperation +{ + if (!self->currentFindSourceOperation) + return; + + [[self projectRelatedSourceProcessingOperations] makeObjectsPerformSelector:@selector(removeDependency:) withObject:self->currentFindSourceOperation]; + [self->currentFindSourceOperation cancel]; + [self _dequeueOperation:self->currentFindSourceOperation]; + self->currentFindSourceOperation = nil; +} + +- (void)_scheduleFinderSourceOperationForPath:(NSString *)path +{ + if (self->currentFindSourceOperation) + return; + + self->currentFindSourceOperation = [[XCCSourcesFinderOperation alloc] initWithCappuccinoProject:self.cappuccinoProject taskLauncher:self->taskLauncher sourcePath:path]; + [[self projectRelatedSourceProcessingOperations] makeObjectsPerformSelector:@selector(addDependency:) withObject:self->currentFindSourceOperation]; + [self _enqueueOperation:self->currentFindSourceOperation]; +} + +- (void)_schedulePBXOperation +{ + [self _schedulePBXOperationWithPathsToAdd:nil pathsToRemove:nil]; +} + +- (void)_schedulePBXOperationWithPathsToAdd:(NSArray *)pathsToAdd pathsToRemove:(NSArray *)pathsToRemove; +{ + BOOL needsEnqueue = NO; + + if (!self->pendingPBXOperation) + { + self->pendingPBXOperation = [[XCCPPXOperation alloc] initWithCappuccinoProject:self.cappuccinoProject taskLauncher:self->taskLauncher]; + needsEnqueue = YES; + } + + if (pathsToAdd) + [self->pendingPBXOperation registerPathsToAddInPBX:pathsToAdd]; + + if (pathsToRemove) + [self->pendingPBXOperation registerPathsToRemoveFromPBX:pathsToRemove]; + + for (XCCSourceProcessingOperation *operation in [self projectRelatedSourceProcessingOperations]) + [self->pendingPBXOperation addDependency:operation]; + + if (needsEnqueue) + [self _enqueueOperation:self->pendingPBXOperation]; +} + +- (void)_scheduleSourceProcessingOperationForPath:(NSString *)path +{ + [self _cancelSourceOperationsForPath:path]; + + XCCSourceProcessingOperation *operation = [[XCCSourceProcessingOperation alloc] initWithCappuccinoProject:self.cappuccinoProject + taskLauncher:self->taskLauncher + sourcePath:[self.cappuccinoProject projectPathForSourcePath:path]]; + if (self->currentFindSourceOperation) + [operation addDependency:self->currentFindSourceOperation]; + + [self _enqueueOperation:operation]; +} + + +#pragma mark - FS Event Management + +- (void)_startFSEventStream +{ + if (self->stream) + return; + + NSArray *pathsToWatch = [XCCCappuccinoProject getPathsToWatchForCappuccinoProject:self.cappuccinoProject]; + void *appPointer = (__bridge void *)self; + FSEventStreamContext context = { 0, appPointer, NULL, NULL, NULL }; + CFTimeInterval latency = 0.5; + UInt64 lastEventID = self.cappuccinoProject.lastEventID ? self.cappuccinoProject.lastEventID.unsignedLongLongValue : kFSEventStreamEventIdSinceNow; + + self->stream = FSEventStreamCreate(NULL, &fsevents_callback, &context, (__bridge CFArrayRef) pathsToWatch, lastEventID, latency, XCCProjectControllerFSEventFlags); + + FSEventStreamScheduleWithRunLoop(self->stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + FSEventStreamStart(self->stream); + + DDLogVerbose(@"FSEventStream started for paths: %@", pathsToWatch); +} + +- (void)_stopFSEventStream +{ + if (!self->stream) + return; + + UInt64 lastEventID = FSEventStreamGetLatestEventId(self->stream); + + if (lastEventID != 0 && lastEventID != UINT64_MAX) + { + self.cappuccinoProject.lastEventID = @(lastEventID); + [self.cappuccinoProject saveSettings]; + } + + FSEventStreamStop(self->stream); + FSEventStreamUnscheduleFromRunLoop(self->stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + FSEventStreamInvalidate(self->stream); + FSEventStreamRelease(self->stream); + + self->stream = NULL; + + DDLogVerbose(@"FSEventStream stopped"); +} + +- (void)_handleFSEventsWithPaths:(NSArray *)paths flags:(const FSEventStreamEventFlags[])eventFlags ids:(const FSEventStreamEventId[])eventIds +{ + NSMutableArray *modifiedPaths = [@[] mutableCopy]; + NSMutableArray *renamedDirectories = [@[] mutableCopy]; + NSFileManager *fm = [NSFileManager defaultManager]; + + BOOL needUpdate = NO; + + for (size_t i = 0; i < paths.count; ++i) + { + FSEventStreamEventFlags flags = eventFlags[i]; + NSString *path = [paths[i] stringByStandardizingPath]; + + BOOL rootChanged = (flags & kFSEventStreamEventFlagRootChanged) != 0; + BOOL needRescan = (flags & kFSEventStreamEventFlagMustScanSubDirs) != 0; + + if (rootChanged || needRescan) + { + DDLogVerbose(@"Watched path changed: %@", path); + + [self _handleProjectPathChange:path]; + return; + } + + BOOL isHistoryDoneSentinalEvent = (flags & kFSEventStreamEventFlagHistoryDone) != 0; + + if (isHistoryDoneSentinalEvent) + { + DDLogVerbose(@"History done sentinal event"); + continue; + } + + BOOL isMountEvent = (flags & kFSEventStreamEventFlagMount) || (flags & kFSEventStreamEventFlagUnmount); + + if (isMountEvent) + { + DDLogVerbose(@"Volume %@: %@", (flags & kFSEventStreamEventFlagMount) ? @"mounted" : @"unmounted", path); + continue; + } + + + BOOL inodeMetaModified = (flags & kFSEventStreamEventFlagItemInodeMetaMod) != 0; + BOOL isFile = (flags & kFSEventStreamEventFlagItemIsFile) != 0; + BOOL isSymlink = (flags & kFSEventStreamEventFlagItemIsSymlink) != 0; + BOOL isDir = (flags & kFSEventStreamEventFlagItemIsDir) != 0; + BOOL renamed = (flags & kFSEventStreamEventFlagItemRenamed) != 0; + BOOL modified = (flags & kFSEventStreamEventFlagItemModified) != 0; + BOOL created = (flags & kFSEventStreamEventFlagItemCreated) != 0; + BOOL removed = (flags & kFSEventStreamEventFlagItemRemoved) != 0; + + if (isDir) + { + if (created && [path isEqualToString:self.cappuccinoProject.projectPath.stringByResolvingSymlinksInPath]) + return; + + if ((renamed || created || removed) && + ![XCCCappuccinoProject shouldIgnoreDirectoryNamed:path.lastPathComponent] && + ![XCCCappuccinoProject pathMatchesIgnoredPaths:path cappuccinoProjectIgnoredPathPredicates:self.cappuccinoProject.ignoredPathPredicates]) + { + DDLogVerbose(@"Renamed directory: %@", path); + + [renamedDirectories addObject:path]; + } + + continue; + } + else if ((isFile || isSymlink) && + (created || modified || renamed || removed || inodeMetaModified) && + [XCCCappuccinoProject isSourceFile:path cappuccinoProject:self.cappuccinoProject]) + { + DDLogVerbose(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]); + + if ([fm fileExistsAtPath:path]) + { + [modifiedPaths addObject:path]; + } + else if ([XCCCappuccinoProject isXibFile:path]) + { + // If a xib is deleted, delete its cib. There is no need to update when a xib is deleted, + // it is inside a folder in Xcode, which updates automatically. + + if (![fm fileExistsAtPath:path]) + { + NSString *cibPath = [path.stringByDeletingPathExtension stringByAppendingPathExtension:@"cib"]; + + if ([fm fileExistsAtPath:cibPath]) + [fm removeItemAtPath:cibPath error:nil]; + + continue; + } + } + + needUpdate = YES; + } + else if ((isFile || isSymlink) && (renamed || removed) && !(modified || created) && [XCCCappuccinoProject isCibFile:path]) + { + DDLogVerbose(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]); + + // If a cib is deleted, mark its xib as needing update so the cib is regenerated + NSString *xibPath = [path.stringByDeletingPathExtension stringByAppendingPathExtension:@"xib"]; + + if ([fm fileExistsAtPath:xibPath]) + { + [modifiedPaths addObject:xibPath]; + needUpdate = YES; + } + } + else if ((isFile || isSymlink) && + (created || modified || renamed || removed || inodeMetaModified) && + [XCCCappuccinoProject isXCCIgnoreFile:path cappuccinoProject:self.cappuccinoProject]) + { + DDLogVerbose(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]); + + [self.cappuccinoProject reloadXcodeCappIgnoreFile]; + } + } + + // If directories were renamed, we take the easy way out and reset the project + if (renamedDirectories.count) + [self _updateXcodeSupportFilesWithRenamedDirectories:renamedDirectories]; + else if (needUpdate) + [self _updateXcodeSupportFilesWithModifiedPaths:modifiedPaths]; +} + +- (void)_handleProjectPathChange:(NSString *)path +{ + NSRunAlertPanel(self.cappuccinoProject.nickname, @"The project directory changed. This project will be removed", @"OK", nil, nil, nil); + + [self.mainXcodeCappController unmanageCappuccinoProjectController:self]; +} + + +#pragma mark - Third Party Application Management + +- (NSString *)_managingApplicationIdenfierForFilePath:(NSString *)filePath +{ + NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; + NSString *app, *type; + + BOOL success = [workspace getInfoForFile:filePath application:&app type:&type]; + + return success ? app : nil; +} + +- (void)launchEditorForPath:(NSString*)path line:(NSInteger)line +{ + NSString *applicationIdentifier = [self _managingApplicationIdenfierForFilePath:path]; + + [self launchEditorForPath:path line:line applicationIdentifier:applicationIdentifier]; +} + +- (void)launchEditorForPath:(NSString*)path line:(NSInteger)line applicationIdentifier:(NSString *)applicationIdentifier +{ + if (!applicationIdentifier) + return; + + NSFileManager *fm = [NSFileManager defaultManager]; + NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; + NSBundle *bundle = [NSBundle bundleWithPath:applicationIdentifier]; + NSString *identifier = bundle.bundleIdentifier; + NSString *executablePath = nil; + XCCLineSpecifier lineSpecifier = kLineSpecifierNone; + + if ([identifier hasPrefix:@"com.sublimetext."]) + { + lineSpecifier = kLineSpecifierColon; + executablePath = [[bundle sharedSupportPath] stringByAppendingPathComponent:@"bin/subl"]; + } + else if ([identifier isEqualToString:@"com.barebones.textwrangler"]) + { + lineSpecifier = kLineSpecifierColon; + executablePath = [[bundle bundlePath] stringByAppendingPathComponent:@"Contents/Helpers/edit"]; + } + else if ([identifier isEqualToString:@"com.barebones.bbedit"]) + { + lineSpecifier = kLineSpecifierColon; + executablePath = [[bundle bundlePath] stringByAppendingPathComponent:@"Contents/Helpers/bbedit"]; + } + else if ([identifier isEqualToString:@"com.macromates.textmate"]) // TextMate 1.x + { + lineSpecifier = kLineSpecifierMinusL; + executablePath = [[bundle sharedSupportPath] stringByAppendingPathComponent:@"Support/bin/mate"]; + } + else if ([identifier hasPrefix:@"com.macromates.TextMate"]) // TextMate 2.x + { + lineSpecifier = kLineSpecifierMinusL; + executablePath = [bundle pathForResource:@"mate" ofType:@""]; + } + else if ([identifier isEqualToString:@"com.chocolatapp.Chocolat"]) + { + lineSpecifier = kLineSpecifierMinusL; + executablePath = [[bundle sharedSupportPath] stringByAppendingPathComponent:@"choc"]; + } + else if ([identifier isEqualToString:@"org.vim.MacVim"]) + { + lineSpecifier = kLineSpecifierPlus; + executablePath = @"/usr/local/bin/mvim"; + } + else if ([identifier isEqualToString:@"org.gnu.Aquamacs"]) + { + if ([fm isExecutableFileAtPath:@"/usr/bin/aquamacs"]) + executablePath = @"/usr/bin/aquamacs"; + else if ([fm isExecutableFileAtPath:@"/usr/local/bin/aquamacs"]) + executablePath = @"/usr/local/bin/aquamacs"; + } + else if ([identifier isEqualToString:@"com.apple.dt.Xcode"]) + { + executablePath = [[bundle bundlePath] stringByAppendingPathComponent:@"Contents/Developer/usr/bin/xed"]; + } + + if (!executablePath || ![fm isExecutableFileAtPath:executablePath]) + { + [workspace openFile:path]; + return; + } + + NSArray *args; + + switch (lineSpecifier) + { + case kLineSpecifierNone: + args = @[path]; + break; + + case kLineSpecifierColon: + args = @[[NSString stringWithFormat:@"%1$@:%2$ld", path, line]]; + break; + + case kLineSpecifierMinusL: + args = @[@"-l", [NSString stringWithFormat:@"%ld", line], path]; + break; + + case kLineSpecifierPlus: + args = @[[NSString stringWithFormat:@"+%ld", line], path]; + break; + } + + [self->taskLauncher runTaskWithCommand:executablePath arguments:args returnType:kTaskReturnTypeNone]; +} + + +#pragma mark - NSUserNotificationCenter Utilities + +- (void)_notifyUserWithOperationError:(XCCOperationError*)anOperationError +{ + NSUserNotification *note = [NSUserNotification new]; + note.title = [[anOperationError.fileName stringByReplacingOccurrencesOfString:self.cappuccinoProject.projectPath withString:@""] substringFromIndex:1]; + note.informativeText = anOperationError.description; + note.actionButtonTitle = @"Show"; + note.otherButtonTitle = @"Close"; + note.userInfo = @{@"cappuccinoProjectPath" : self.cappuccinoProject.projectPath, @"sourcePath": anOperationError.fileName}; + + [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:note]; +} + + +#pragma mark - Public Utilities + +- (void)reinitializeProjectFromSettings +{ + DDLogVerbose(@"Saving Cappuccino configuration project %@", self.cappuccinoProject.projectPath); + + [self _cancelAllProjectRelatedOperations]; + [self.cappuccinoProject saveSettings]; + + int previousStatus = self.cappuccinoProject.status; + [self _stopListeningToProject]; + [self _reinitializeTaskLauncher]; + + if (!self->taskLauncher.isValid) + return; + + if (previousStatus == XCCCappuccinoProjectStatusListening) + [self _startListeningToProject]; + + DDLogVerbose(@"Cappuccino configuration project %@ has been saved", self.cappuccinoProject.projectPath); +} + +- (void)applicationIsClosing +{ + [self _stopFSEventStream]; +} + +- (void)cleanUpBeforeDeletion +{ + [self cancelAllOperations:self]; + [self _stopListeningToOperationsNotifications]; + [self _stopListeningToProject]; + [self _removeXcodeProject]; + [self _removeXcodeSupportDirectory]; + + [self.mainXcodeCappController.operationsViewController reload]; + [self.mainXcodeCappController.errorsViewController reload]; +} + + +#pragma mark - Actions + +- (IBAction)cancelAllOperations:(id)aSender +{ + [self _cancelAllProjectRelatedOperations]; + [self.mainXcodeCappController.operationsViewController reload]; +} + +- (IBAction)resetProject:(id)aSender +{ + [self _stopListeningToProject]; + [self _removeXcodeSupportDirectory]; + [self _removeXcodeProject]; + [self _reinitializeProjectController]; + [self _startListeningToProject]; +} + +- (IBAction)openProjectInXcode:(id)aSender +{ + BOOL isDirectory; + BOOL isOpened = YES; + NSFileManager *fm = [NSFileManager defaultManager]; + BOOL exists = [fm fileExistsAtPath:self.cappuccinoProject.XcodeProjectPath isDirectory:&isDirectory]; + + if (exists && isDirectory) + { + DDLogVerbose(@"Opening Xcode project at: %@", self.cappuccinoProject.XcodeProjectPath); + + isOpened = [[NSWorkspace sharedWorkspace] openFile:self.cappuccinoProject.XcodeProjectPath]; + } + + if (!exists || !isDirectory || !isOpened) + { + NSString *text; + + if (!isOpened) + text = @"The project exists, but failed to open."; + else + text = [NSString stringWithFormat:@"%@ %@.", self.cappuccinoProject.XcodeProjectPath, !exists ? @"does not exist" : @"is not an Xcode project"]; + + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + NSInteger response = NSRunAlertPanel(@"The project could not be opened.", @"%@\n\nWould you like to regenerate the project?", @"Yes", @"No", nil, text); + + if (response == NSAlertFirstButtonReturn) + [self resetProject:self]; + } +} + +- (IBAction)openProjectInFinder:(id)sender +{ + [[NSWorkspace sharedWorkspace] openFile:self.cappuccinoProject.projectPath]; +} + +- (IBAction)openProjectInEditor:(id)sender +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSArray *contents = [fm contentsOfDirectoryAtPath:self.cappuccinoProject.projectPath error:nil]; + NSString *firstObjjFile; + + for (NSString *file in contents) + { + if ([[file pathExtension] isEqualToString:@"j"]) + { + firstObjjFile = file; + break; + } + } + + if (!firstObjjFile) + return; + + NSString *applicationIdentifier = [self _managingApplicationIdenfierForFilePath:[self.cappuccinoProject.projectPath stringByAppendingPathComponent:firstObjjFile]]; + + if (!applicationIdentifier) + return; + + [self launchEditorForPath:self.cappuccinoProject.projectPath line:0 applicationIdentifier:applicationIdentifier]; +} + +- (IBAction)openProjectInTerminal:(id)sender; +{ + NSString *s = [NSString stringWithFormat:@"tell application \"Terminal\"\n do script \"cd %@; clear\" \n activate\n end tell", self.cappuccinoProject.projectPath]; + NSAppleScript *script = [[NSAppleScript alloc] initWithSource:s]; + [script executeAndReturnError:nil]; +} + +- (IBAction)switchProjectListeningStatus:(id)sender +{ + if (self.cappuccinoProject.status == XCCCappuccinoProjectStatusStopped) + [self _startListeningToProject]; + else + [self _stopListeningToProject]; +} + +@end + + diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.h b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.h new file mode 100644 index 000000000..3b98fd646 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.h @@ -0,0 +1,30 @@ +// +// CappuccinoProjectCellView.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/11/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import +#import "XCCCappuccinoProjectController.h" +#import "YRKSpinningProgressIndicator.h" + +@interface XCCCappuccinoProjectControllerDataView : NSTableCellView +{ + IBOutlet NSBox *lineBottom; + IBOutlet NSTextField *fieldNickname; + IBOutlet NSTextField *fieldPath; + IBOutlet NSButton *buttonSwitchStatus; + IBOutlet NSButton *buttonOpenXcodeProject; + IBOutlet NSButton *buttonResetProject; + IBOutlet NSButton *buttonOpenInFinder; + IBOutlet NSButton *buttonOpenInEditor; + IBOutlet NSButton *buttonOpenInTerminal; + IBOutlet NSBox *boxStatus; + IBOutlet YRKSpinningProgressIndicator *operationsProgressIndicator; +} + +@property XCCCappuccinoProjectController *controller; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m new file mode 100644 index 000000000..524205f90 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m @@ -0,0 +1,163 @@ +// +// CappuccinoProjectCellView.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/11/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCCappuccinoProjectControllerDataView.h" +#import "XCCCappuccinoProject.h" + +static NSColor * XCCCappuccinoProjectDataViewColorLoading; +static NSColor * XCCCappuccinoProjectDataViewColorStopped; +static NSColor * XCCCappuccinoProjectDataViewColorListening; +static NSColor * XCCCappuccinoProjectDataViewColorProcessing; +static NSColor * XCCCappuccinoProjectDataViewColorError; + + +@implementation XCCCappuccinoProjectControllerDataView + +@synthesize controller = _controller; + ++ (void)initialize +{ + XCCCappuccinoProjectDataViewColorLoading = [NSColor colorWithCalibratedRed:107.0/255.0 green:148.0/255.0 blue:236.0/255.0 alpha:1.0]; + XCCCappuccinoProjectDataViewColorStopped = [NSColor colorWithCalibratedRed:138.0/255.0 green:138.0/255.0 blue:138.0/255.0 alpha:1.0]; + XCCCappuccinoProjectDataViewColorListening = [NSColor colorWithCalibratedRed:179.0/255.0 green:214.0/255.0 blue:69.0/255.0 alpha:1.0]; + XCCCappuccinoProjectDataViewColorProcessing = [NSColor colorWithCalibratedRed:107.0/255.0 green:148.0/255.0 blue:236.0/255.0 alpha:1.0]; + XCCCappuccinoProjectDataViewColorError = [NSColor colorWithCalibratedRed:247.0/255.0 green:97.0/255.0 blue:89.0/255.0 alpha:1.0]; +} + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow +{ + if (newWindow) + { + [self->buttonSwitchStatus setTarget:self.controller]; + [self->buttonSwitchStatus setAction:@selector(switchProjectListeningStatus:)]; + [self->buttonOpenXcodeProject setTarget:self.controller]; + [self->buttonOpenXcodeProject setAction:@selector(openProjectInXcode:)]; + [self->buttonResetProject setTarget:self.controller]; + [self->buttonResetProject setAction:@selector(resetProject:)]; + [self->buttonOpenInEditor setTarget:self.controller]; + [self->buttonOpenInEditor setAction:@selector(openProjectInEditor:)]; + [self->buttonOpenInFinder setTarget:self.controller]; + [self->buttonOpenInFinder setAction:@selector(openProjectInFinder:)]; + [self->buttonOpenInTerminal setTarget:self.controller]; + [self->buttonOpenInTerminal setAction:@selector(openProjectInTerminal:)]; + + self->boxStatus.borderColor = [NSColor clearColor]; + self->boxStatus.fillColor = [NSColor colorWithCalibratedRed:217.0/255.0 green:217.0/255.0 blue:217.0/255.0 alpha:1.0]; + + [self.controller.cappuccinoProject addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil]; + [self.controller addObserver:self forKeyPath:@"errors" options:NSKeyValueObservingOptionNew context:nil]; + [self.controller.cappuccinoProject addObserver:self forKeyPath:@"processing" options:NSKeyValueObservingOptionNew context:nil]; + [self.controller addObserver:self forKeyPath:@"operationsTotal" options:NSKeyValueObservingOptionNew context:nil]; + [self.controller addObserver:self forKeyPath:@"operationsProgress" options:NSKeyValueObservingOptionNew context:nil]; + + [self->fieldNickname bind:NSValueBinding toObject:self.controller.cappuccinoProject withKeyPath:@"nickname" options:nil]; + [self->fieldPath bind:NSValueBinding toObject:self.controller.cappuccinoProject withKeyPath:@"projectPath" options:nil]; + + [self->operationsProgressIndicator startAnimation:self]; + self->operationsProgressIndicator.maxValue = 1.0; + } + else + { + [self.controller.cappuccinoProject removeObserver:self forKeyPath:@"status"]; + [self.controller removeObserver:self forKeyPath:@"errors"]; + [self.controller.cappuccinoProject removeObserver:self forKeyPath:@"processing"]; + [self.controller removeObserver:self forKeyPath:@"operationsTotal"]; + [self.controller removeObserver:self forKeyPath:@"operationsProgress"]; + + [self->fieldNickname unbind:NSValueBinding]; + [self->fieldPath unbind:NSValueBinding]; + + [self->operationsProgressIndicator stopAnimation:self]; + } + + [self _updateDataView]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + dispatch_async(dispatch_get_main_queue(), ^{ + [self _updateDataView]; + }); +} + +- (void)_updateDataView +{ + switch (self.controller.cappuccinoProject.status) + { + case XCCCappuccinoProjectStatusStopped: + self->boxStatus.fillColor = XCCCappuccinoProjectDataViewColorStopped; + self->buttonSwitchStatus.image = self.backgroundStyle == NSBackgroundStyleDark ? [NSImage imageNamed:@"run-white"] : [NSImage imageNamed:@"run"]; + self->operationsProgressIndicator.hidden = YES; + break; + + case XCCCappuccinoProjectStatusListening: + self->boxStatus.fillColor = [self.controller.errors count] ? XCCCappuccinoProjectDataViewColorError : XCCCappuccinoProjectDataViewColorListening; + self->buttonSwitchStatus.image = self.backgroundStyle == NSBackgroundStyleDark ? [NSImage imageNamed:@"stop-white"] : [NSImage imageNamed:@"stop"]; + + if (self.controller.operationsTotal == 0) + { + self->operationsProgressIndicator.hidden = YES; + [self->operationsProgressIndicator setNeedsDisplay:YES]; + } + else if (self.controller.operationsTotal <= 4) + { + self->operationsProgressIndicator.hidden = NO; + self->operationsProgressIndicator.indeterminate = YES; + [self->operationsProgressIndicator startAnimation:self]; + } + else if (self.controller.operationsTotal > 4) + { + self->operationsProgressIndicator.hidden = NO; + self->operationsProgressIndicator.indeterminate = NO; + self->operationsProgressIndicator.currentValue = self.controller.operationsProgress; + [self->operationsProgressIndicator setNeedsDisplay:YES]; + } + + break; + } +} + +- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle +{ + BOOL isStopped = self.controller.cappuccinoProject.status == XCCCappuccinoProjectStatusStopped; + + if (backgroundStyle == NSBackgroundStyleDark) + { + self->lineBottom.hidden = YES; + + self->operationsProgressIndicator.backgroundColor = [NSColor whiteColor]; + self->operationsProgressIndicator.color = [NSColor whiteColor]; + self->fieldNickname.textColor = [NSColor whiteColor]; + self->fieldPath.textColor = [NSColor whiteColor]; + self->buttonSwitchStatus.image = isStopped ? [NSImage imageNamed:@"run-white"] : [NSImage imageNamed:@"stop-white"]; + self->buttonOpenInFinder.image = [NSImage imageNamed:@"open-in-finder-white"]; + self->buttonOpenInEditor.image = [NSImage imageNamed:@"open-in-editor-white"]; + self->buttonOpenInTerminal.image = [NSImage imageNamed:@"open-in-terminal-white"]; + self->buttonOpenXcodeProject.image = [NSImage imageNamed:@"open-in-xcode-white"]; + self->buttonResetProject.image = [NSImage imageNamed:@"resync-white"]; + } + else + { + self->lineBottom.hidden = NO; + + self->operationsProgressIndicator.backgroundColor = [NSColor secondaryLabelColor]; + self->operationsProgressIndicator.color = [NSColor secondaryLabelColor]; + self->fieldNickname.textColor = [NSColor controlTextColor]; + self->fieldPath.textColor = [NSColor secondaryLabelColor]; + self->buttonSwitchStatus.image = isStopped ? [NSImage imageNamed:@"run"] : [NSImage imageNamed:@"stop"]; + self->buttonOpenInFinder.image = [NSImage imageNamed:@"open-in-finder"]; + self->buttonOpenInEditor.image = [NSImage imageNamed:@"open-in-editor"]; + self->buttonOpenInTerminal.image = [NSImage imageNamed:@"open-in-terminal"]; + self->buttonOpenXcodeProject.image = [NSImage imageNamed:@"open-in-xcode"]; + self->buttonResetProject.image = [NSImage imageNamed:@"resync"]; + } + + [super setBackgroundStyle:backgroundStyle]; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h new file mode 100644 index 000000000..52a79e8ae --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h @@ -0,0 +1,28 @@ +// +// XCCErrorsViewController.h +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCCappuccinoProjectController; + + +@interface XCCErrorsViewController : NSViewController +{ + IBOutlet NSOutlineView *errorOutlineView; + IBOutlet NSBox *maskingView; +} + +@property XCCCappuccinoProjectController *cappuccinoProjectController; + +- (void)selectItem:(id)anItem; +- (void)reload; + +- (IBAction)openErroredFileInEditor:(id)sender; +- (IBAction)cleanProjectErrors:(id)aSender; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m new file mode 100644 index 000000000..8fdf3ac89 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m @@ -0,0 +1,193 @@ +// +// XCCErrorsViewController.m +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCErrorsViewController.h" +#import "XCCCappuccinoProjectController.h" +#import "XCCCappuccinoProject.h" +#import "XCCOperationErrorDataView.h" +#import "XCCOperationErrorHeaderDataView.h" +#import "XCCMainController.h" +#import "XCCSourceProcessingOperation.h" + +@implementation XCCErrorsViewController + +#pragma mark - Initialization + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + [self->errorOutlineView setTarget:self]; + [self->errorOutlineView setDoubleAction:@selector(openErroredFileInEditor:)]; +} + + +#pragma mark - Utilities + +- (void)_showMaskingView:(BOOL)shouldShow +{ + if (shouldShow) + { + if (self->maskingView.superview) + return; + + [self->errorOutlineView setHidden:YES]; + + self->maskingView.frame = [self.view bounds]; + [self.view addSubview:self->maskingView]; + } + else + { + if (!self->maskingView.superview) + return; + + [self->errorOutlineView setHidden:NO]; + + [self->maskingView removeFromSuperview]; + } +} + +- (void)reload +{ + [self->errorOutlineView reloadData]; + [self->errorOutlineView expandItem:nil expandChildren:YES]; + + [self _showMaskingView:!self.cappuccinoProjectController.errors.count]; +} + +- (void)selectItem:(id)anItem +{ + NSInteger indexOfItem = [self _indexOfItem:anItem]; + + if (indexOfItem == NSNotFound) + return; + + [self->errorOutlineView scrollRowToVisible:indexOfItem]; +} + +- (NSInteger)_indexOfItem:(id)anItem +{ + NSInteger index = 0; + + NSArray *keys = [self.cappuccinoProjectController.errors allKeys]; + + for (int i = 0; i < [keys count]; i++) + { + NSString *key = [[self.cappuccinoProjectController.errors allKeys] objectAtIndex:i]; + + if ([key isEqual:anItem]) + return index; + + index++; + + NSArray *operationErrors = [self.cappuccinoProjectController.errors objectForKey:key]; + + for (int j = 0; j < [operationErrors count]; j++) + { + XCCOperationError *operationError = [operationErrors objectAtIndex:j]; + + if ([operationError isEqual:anItem]) + return index; + + index++; + } + } + + return NSNotFound; +} + +#pragma mark - Actions + +- (IBAction)cleanProjectErrors:(id)aSender +{ + [self.cappuccinoProjectController removeAllOperationErrors]; + [self reload]; + [self.cappuccinoProjectController.mainXcodeCappController reloadTotalNumberOfErrors]; +} + +- (IBAction)openErroredFileInEditor:(NSView *)sender +{ + NSInteger index = (sender != self->errorOutlineView) ? [self->errorOutlineView rowForView:sender] : [self->errorOutlineView selectedRow]; + id dataView = [self->errorOutlineView viewAtColumn:0 row:index makeIfNecessary:NO]; + + if (![dataView isKindOfClass:[XCCOperationErrorDataView class]]) + return; + + NSString *path = ((XCCOperationErrorDataView*)dataView).errorOperation.fileName; + NSInteger line = ((XCCOperationErrorDataView*)dataView).errorOperation.lineNumber.intValue; + + [self.cappuccinoProjectController launchEditorForPath:path line:line]; +} + + +#pragma mark - outlineView data source and delegate + +- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item +{ + if (!item) + return self.cappuccinoProjectController.errors.allKeys.count; + + return ((NSArray *)self.cappuccinoProjectController.errors[item]).count; +} + +- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item +{ + return ![item isKindOfClass:[XCCOperationError class]]; +} + +- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item +{ + if (!item) + return self.cappuccinoProjectController.errors.allKeys[index]; + + return self.cappuccinoProjectController.errors[item][index]; +} + +- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item +{ + return item; +} + +- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item +{ + if ([item isKindOfClass:[XCCOperationError class]]) + { + XCCOperationErrorDataView *dataView = [outlineView makeViewWithIdentifier:@"OperationErrorCell" owner:nil]; + + dataView.errorOperation = item; + [dataView.buttonOpenInEditor setTarget:self]; + [dataView.buttonOpenInEditor setAction:@selector(openErroredFileInEditor:)]; + + return dataView; + } + else + { + XCCOperationErrorHeaderDataView *dataView = [outlineView makeViewWithIdentifier:@"OperationErrorHeaderCell" owner:nil]; + + dataView.fileName = [[item stringByReplacingOccurrencesOfString:self.cappuccinoProjectController.cappuccinoProject.projectPath withString:@""] substringFromIndex:1]; + + return dataView; + } +} + +- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(XCCOperationError *)item +{ + if ([item isKindOfClass:[XCCOperationError class]]) + { + CGRect frame = [item.message boundingRectWithSize:CGSizeMake([outlineView frame].size.width, CGFLOAT_MAX) + options:NSStringDrawingUsesLineFragmentOrigin + attributes:@{ NSFontAttributeName:[NSFont fontWithName:@"Menlo" size:11] }]; + + return frame.size.height + 38.0; + } + + else + return 20.0; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCFSEventLogUtils.h b/Tools/XcodeCapp/XcodeCapp/XCCFSEventLogUtils.h new file mode 100644 index 000000000..c5067f980 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCFSEventLogUtils.h @@ -0,0 +1,15 @@ +// +// LogUtils.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/8/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@interface XCCFSEventLogUtils : NSObject + ++ (NSString *)dumpFSEventFlags:(FSEventStreamEventFlags)flags; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCFSEventLogUtils.m b/Tools/XcodeCapp/XcodeCapp/XCCFSEventLogUtils.m new file mode 100644 index 000000000..ae35dc256 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCFSEventLogUtils.m @@ -0,0 +1,65 @@ +// +// LogUtils.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/8/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCFSEventLogUtils.h" + +@implementation XCCFSEventLogUtils + ++ (NSString *)dumpFSEventFlags:(FSEventStreamEventFlags)flags +{ + BOOL created = (flags & kFSEventStreamEventFlagItemCreated) != 0; + BOOL removed = (flags & kFSEventStreamEventFlagItemRemoved) != 0; + BOOL inodeMetaModified = (flags & kFSEventStreamEventFlagItemInodeMetaMod) != 0; + BOOL renamed = (flags & kFSEventStreamEventFlagItemRenamed) != 0; + BOOL modified = (flags & kFSEventStreamEventFlagItemModified) != 0; + BOOL finderInfoModified = (flags & kFSEventStreamEventFlagItemFinderInfoMod) != 0; + BOOL changedOwner = (flags & kFSEventStreamEventFlagItemChangeOwner) != 0; + BOOL xattrModified = (flags & kFSEventStreamEventFlagItemXattrMod) != 0; + BOOL isFile = (flags & kFSEventStreamEventFlagItemIsFile) != 0; + BOOL isDir = (flags & kFSEventStreamEventFlagItemIsDir) != 0; + BOOL isSymlink = (flags & kFSEventStreamEventFlagItemIsSymlink) != 0; + + NSMutableArray *flagNames = [@[] mutableCopy]; + + if (created) + [flagNames addObject:@"created"]; + + if (removed) + [flagNames addObject:@"removed"]; + + if (inodeMetaModified) + [flagNames addObject:@"inode"]; + + if (renamed) + [flagNames addObject:@"renamed"]; + + if (modified) + [flagNames addObject:@"modified"]; + + if (finderInfoModified) + [flagNames addObject:@"Finder info"]; + + if (changedOwner) + [flagNames addObject:@"owner"]; + + if (xattrModified) + [flagNames addObject:@"xattr"]; + + if (isFile) + [flagNames addObject:@"file"]; + + if (isDir) + [flagNames addObject:@"dir"]; + + if (isSymlink) + [flagNames addObject:@"symlink"]; + + return [flagNames componentsJoinedByString:@", "]; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCMainController.h b/Tools/XcodeCapp/XcodeCapp/XCCMainController.h new file mode 100644 index 000000000..35cf6fac3 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCMainController.h @@ -0,0 +1,49 @@ +// +// MainWindowController.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/20/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCCappuccinoProject; +@class XCCCappuccinoProjectController; +@class XCCOperationsViewController; +@class XCCErrorsViewController; +@class XCCSettingsViewController; +@class XCCWelcomeView; + +@interface XCCMainController : NSWindowController +{ + IBOutlet NSMenu *menuTableViewProject; + IBOutlet NSBox *maskingView; + IBOutlet NSSplitView *splitView; + IBOutlet NSTableView *projectTableView; + IBOutlet NSView *projectViewContainer; + IBOutlet NSTabView *tabViewProject; + IBOutlet NSButton *buttonSelectConfigurationTab; + IBOutlet NSButton *buttonSelectErrorsTab; + IBOutlet NSButton *buttonSelectOperationsTab; + IBOutlet XCCWelcomeView *welcomeViewMask; +} + +@property IBOutlet XCCSettingsViewController *settingsViewController; +@property IBOutlet XCCOperationsViewController *operationsViewController; +@property IBOutlet XCCErrorsViewController *errorsViewController; +@property NSMutableArray *cappuccinoProjectControllers; +@property XCCCappuccinoProjectController *currentCappuccinoProjectController; +@property int totalNumberOfErrors; + +- (void)manageCappuccinoProjectControllerForPath:(NSString *)aProjectPath; +- (void)unmanageCappuccinoProjectController:(XCCCappuccinoProjectController *)aController; +- (void)reloadTotalNumberOfErrors; +- (void)notifyCappuccinoControllersApplicationIsClosing; + +- (IBAction)cleanAllErrors:(id)aSender; +- (IBAction)addProject:(id)aSender; +- (IBAction)removeProject:(id)aSender; +- (IBAction)updateSelectedTab:(id)aSender; + +@end \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XCCMainController.m b/Tools/XcodeCapp/XcodeCapp/XCCMainController.m new file mode 100644 index 000000000..31d074be0 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCMainController.m @@ -0,0 +1,497 @@ +// +// MainWindowController.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/20/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "NSMutableArray+moveIndexes.h" +#import "XCCMainController.h" +#import "XCCCappuccinoProject.h" +#import "XCCCappuccinoProjectController.h" +#import "XCCCappuccinoProjectControllerDataView.h" +#import "XCCUserDefaults.h" +#import "XCCOperationsViewController.h" +#import "XCCErrorsViewController.h" +#import "XCCSettingsViewController.h" +#import "XCCWelcomeView.h" + + +@implementation XCCMainController + +#pragma mark - Initialization + +- (void)windowDidLoad +{ + [self showWindow:self]; + + self->welcomeViewMask.mainXcodeCappController = self; + [self->welcomeViewMask showLoading:YES]; + [self _showWelcomeView:YES]; + [self _showMaskingView:YES]; + + NSTabViewItem *itemConfiguration = [[NSTabViewItem alloc] initWithIdentifier:@"configuration"]; + [itemConfiguration setView:self.settingsViewController.view]; + [self->tabViewProject addTabViewItem:itemConfiguration]; + + NSTabViewItem *itemErrors = [[NSTabViewItem alloc] initWithIdentifier:@"errors"]; + [itemErrors setView:self.errorsViewController.view]; + [self->tabViewProject addTabViewItem:itemErrors]; + + NSTabViewItem *itemOperations = [[NSTabViewItem alloc] initWithIdentifier:@"operations"]; + [itemOperations setView:self.operationsViewController.view]; + [self->tabViewProject addTabViewItem:itemOperations]; + + + [self _setTextColor:[NSColor controlTextColor] forButton:self->buttonSelectConfigurationTab]; + [self _setTextColor:[NSColor controlTextColor] forButton:self->buttonSelectErrorsTab]; + [self _setTextColor:[NSColor controlTextColor] forButton:self->buttonSelectOperationsTab]; + + + [self updateSelectedTab:self->buttonSelectConfigurationTab]; + + [self->projectTableView registerForDraggedTypes:@[@"projects", NSFilenamesPboardType]]; + [self->projectTableView setAllowsEmptySelection:YES]; + + [self->welcomeViewMask showLoading:NO]; + + [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self; + + [self _restoreManagedProjects]; + [self _restoreLastSelectedProject]; +} + +- (void)_setTextColor:(NSColor *)color forButton:(NSButton *)button +{ + NSMutableParagraphStyle *paragraphStyle= [NSMutableParagraphStyle new]; + [paragraphStyle setAlignment:NSCenterTextAlignment]; + + NSDictionary *attrs = @{NSFontAttributeName: [NSFont systemFontOfSize:11], + NSForegroundColorAttributeName: color, + NSParagraphStyleAttributeName: paragraphStyle}; + + button.attributedTitle = [[NSMutableAttributedString alloc] initWithString:button.title attributes:attrs]; + +} + +#pragma mark - Private Utilities + +- (void)_showMaskingView:(BOOL)shouldShow +{ + if (shouldShow) + { + if (self->maskingView.superview) + return; + + self->projectViewContainer.hidden = YES; + + self->maskingView.frame = [[self->splitView subviews][1] bounds]; + [[self->splitView subviews][1] addSubview:self->maskingView positioned:NSWindowAbove relativeTo:nil]; + } + else + { + if (!self->maskingView.superview) + return; + + self->projectViewContainer.hidden = NO; + + [self->maskingView removeFromSuperview]; + } +} + +- (void)_showWelcomeView:(BOOL)shouldShow +{ + if (shouldShow) + { + if (self->welcomeViewMask.superview) + return; + + self->splitView.hidden = YES; + + self->welcomeViewMask.frame = [self->splitView.superview bounds]; + [self->splitView.superview addSubview:self->welcomeViewMask positioned:NSWindowAbove relativeTo:nil]; + } + else + { + if (!self->welcomeViewMask.superview) + return; + + self->splitView.hidden = NO; + + [self->welcomeViewMask removeFromSuperview]; + } +} + +- (void)_restoreLastSelectedProject +{ + DDLogVerbose(@"Start : selecting last selected project"); + + NSString *lastSelectedProjectPath = [[NSUserDefaults standardUserDefaults] valueForKey:XCCUserDefaultsSelectedProjectPath]; + + [self _selectCappuccinoProjectControllerWithPath:lastSelectedProjectPath]; + + DDLogVerbose(@"Stop : selecting last selected project"); +} + +- (void)_selectCappuccinoProjectControllerWithPath:(NSString*)aCappuccinoProjectPath +{ + NSInteger indexToSelect = 0; + + if ([aCappuccinoProjectPath length]) + { + for (XCCCappuccinoProjectController *controller in self.cappuccinoProjectControllers) + { + if ([controller.cappuccinoProject.projectPath isEqualToString:aCappuccinoProjectPath]) + { + indexToSelect = [self.cappuccinoProjectControllers indexOfObject:controller]; + break; + } + } + + [self->projectTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexToSelect] byExtendingSelection:NO]; + } +} + +- (void)_restoreManagedProjects +{ + DDLogVerbose(@"restore managed projects"); + self.cappuccinoProjectControllers = [@[] mutableCopy]; + + NSArray *projectHistory = [[NSUserDefaults standardUserDefaults] arrayForKey:XCCUserDefaultsManagedProjects]; + NSFileManager *fm = [NSFileManager defaultManager]; + NSMutableArray *missingProjects = [@[] mutableCopy]; + + for (NSString *path in projectHistory) + { + DDLogVerbose(@"Checking previously managed project at path: %@", path); + if (![fm fileExistsAtPath:path isDirectory:nil]) + { + [missingProjects addObject:path]; + DDLogVerbose(@"Not found: project at path: %@", path); + continue; + } + + XCCCappuccinoProjectController *cappuccinoProjectController = [[XCCCappuccinoProjectController alloc] initWithPath:path controller:self]; + [self.cappuccinoProjectControllers addObject:cappuccinoProjectController]; + } + + [self _reloadProjectsList]; + + if (missingProjects.count) + { + NSRunAlertPanel(@"Missing Projects", + @"Some managed projects could not be found and have been removed:\n\n" + @"%@\n\n", + @"OK", + nil, + nil, + [missingProjects componentsJoinedByString:@", "]); + } + + [self _saveManagedProjectsToUserDefaults]; + + for (XCCCappuccinoProjectController *controller in self.cappuccinoProjectControllers) + { + if (controller.cappuccinoProject.previousSavedStatus) + [controller switchProjectListeningStatus:self]; + } + + DDLogVerbose(@"managed projects restored"); +} + +- (void)_saveSelectedProject +{ + NSString *path = self.currentCappuccinoProjectController.cappuccinoProject.projectPath; + + if (!path) + path = @""; + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:XCCUserDefaultsSelectedProjectPath]; +} + +- (void)_saveManagedProjectsToUserDefaults +{ + NSMutableArray *historyProjectPaths = [@[] mutableCopy]; + + for (XCCCappuccinoProjectController *controller in self.cappuccinoProjectControllers) + [historyProjectPaths addObject:controller.cappuccinoProject.projectPath]; + + [[NSUserDefaults standardUserDefaults] setObject:historyProjectPaths forKey:XCCUserDefaultsManagedProjects]; +} + +- (void)_reloadProjectsList +{ + [self->projectTableView reloadData]; + + if (self.cappuccinoProjectControllers.count == 0) + [self _showWelcomeView:YES]; + else + [self _showWelcomeView:NO]; + +} + + +#pragma mark - Public Utilities + +- (void)manageCappuccinoProjectControllerForPath:(NSString *)path +{ + if ([[self.cappuccinoProjectControllers filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"cappuccinoProject.projectPath == %@", path]] count]) + { + NSRunAlertPanel(@"This project is already managed.", @"Please remove the other project or use the reset button.", @"OK", nil, nil, nil); + return; + } + + XCCCappuccinoProjectController *controller = [[XCCCappuccinoProjectController alloc] initWithPath:path controller:self]; + + [self.cappuccinoProjectControllers addObject:controller]; + + NSInteger index = [self.cappuccinoProjectControllers indexOfObject:controller]; + + [self _reloadProjectsList]; + [self->projectTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; + [self->projectTableView scrollRowToVisible:index]; + + [self _saveManagedProjectsToUserDefaults]; + + [controller switchProjectListeningStatus:self]; +} + +- (void)unmanageCappuccinoProjectController:(XCCCappuccinoProjectController*)aController +{ + NSInteger selectedCappuccinoProject = [self.cappuccinoProjectControllers indexOfObject:aController]; + + if (selectedCappuccinoProject == -1) + return; + + [self->projectTableView deselectRow:selectedCappuccinoProject]; + [aController cleanUpBeforeDeletion]; + [self.cappuccinoProjectControllers removeObjectAtIndex:selectedCappuccinoProject]; + + [self _reloadProjectsList]; + + [self _saveManagedProjectsToUserDefaults]; +} + + +- (void)notifyCappuccinoControllersApplicationIsClosing +{ + [self.cappuccinoProjectControllers makeObjectsPerformSelector:@selector(applicationIsClosing)]; +} + +- (void)reloadTotalNumberOfErrors +{ + int totalErrors = 0; + + for (XCCCappuccinoProjectController *controller in self.cappuccinoProjectControllers) + totalErrors += controller.errors.count; + + [self willChangeValueForKey:@"totalNumberOfErrors"]; + self.totalNumberOfErrors = totalErrors; + [self didChangeValueForKey:@"totalNumberOfErrors"]; + + if (self.totalNumberOfErrors) + [[[NSApplication sharedApplication] dockTile] setBadgeLabel:@(self.totalNumberOfErrors).description]; + else + [[[NSApplication sharedApplication] dockTile] setBadgeLabel:nil]; +} + + +#pragma mark - Actions + +- (IBAction)cleanAllErrors:(id)aSender +{ + [self.cappuccinoProjectControllers makeObjectsPerformSelector:@selector(cleanProjectErrors:) withObject:self]; +} + +- (IBAction)addProject:(id)aSender +{ + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + openPanel.title = @"Add a new Cappuccino Project to XcodeCapp"; + openPanel.canCreateDirectories = YES; + openPanel.canChooseDirectories = YES; + openPanel.canChooseFiles = NO; + + if ([openPanel runModal] != NSFileHandlingPanelOKButton) + return; + + NSString *projectPath = [[openPanel.URLs[0] path] stringByStandardizingPath]; + + [self manageCappuccinoProjectControllerForPath:projectPath]; +} + +- (IBAction)removeProject:(id)aSender +{ + NSInteger selectedCappuccinoProject = [self->projectTableView selectedRow]; + + if (selectedCappuccinoProject == -1) + return; + + [self unmanageCappuccinoProjectController:(self.cappuccinoProjectControllers)[selectedCappuccinoProject]]; +} + +- (IBAction)updateSelectedTab:(NSButton *)sender +{ + self->buttonSelectConfigurationTab.state = NSOffState; + self->buttonSelectErrorsTab.state = NSOffState; + self->buttonSelectOperationsTab.state = NSOffState; + + [self _setTextColor:[NSColor controlTextColor] forButton:self->buttonSelectConfigurationTab]; + [self _setTextColor:[NSColor controlTextColor] forButton:self->buttonSelectErrorsTab]; + [self _setTextColor:[NSColor controlTextColor] forButton:self->buttonSelectOperationsTab]; + + sender.state = NSOnState; + [self _setTextColor:[NSColor colorWithCalibratedRed:107.0/255.0 green:148.0/255.0 blue:236.0/255.0 alpha:1.0] forButton:sender]; + + if (sender == self->buttonSelectConfigurationTab) + [self->tabViewProject selectTabViewItemAtIndex:0]; + if (sender == self->buttonSelectErrorsTab) + [self->tabViewProject selectTabViewItemAtIndex:1]; + if (sender == self->buttonSelectOperationsTab) + [self->tabViewProject selectTabViewItemAtIndex:2]; +} + + +#pragma mark - NSUserNotificationCenter delegate + +- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification +{ + NSDictionary *userInfo = [notification userInfo]; + [center removeDeliveredNotification:notification]; + + [self _selectCappuccinoProjectControllerWithPath:userInfo[@"cappuccinoProjectPath"]]; + [self updateSelectedTab:self->buttonSelectErrorsTab]; + [self.errorsViewController selectItem:userInfo[@"sourcePath"]]; +} + + +#pragma mark - SplitView delegate + +- (CGFloat)splitView:(NSSplitView *)aSplitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex +{ + return 300.0; +} + +- (CGFloat)splitView:(NSSplitView *)aSplitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex +{ + return 350.0; +} + +- (void)splitView:(NSSplitView *)aSplitView resizeSubviewsWithOldSize:(NSSize)oldSize +{ + [aSplitView adjustSubviews]; + + [aSplitView setPosition:((NSView *)splitView.subviews.firstObject).frame.size.width ofDividerAtIndex:0]; +} + +#pragma mark - TableView DataSource + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + return [self.cappuccinoProjectControllers count]; +} + +#pragma mark - TableView Delegates + +- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + XCCCappuccinoProjectControllerDataView *dataView = [tableView makeViewWithIdentifier:@"MainCell" owner:nil]; + XCCCappuccinoProjectController *cappuccinoProjectController = (self.cappuccinoProjectControllers)[row]; + + dataView.controller = cappuccinoProjectController; + + return dataView; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)notification +{ + NSInteger selectedIndex = [self->projectTableView selectedRow]; + + self.currentCappuccinoProjectController = (selectedIndex == -1) ? nil : (self.cappuccinoProjectControllers)[selectedIndex]; + + self.operationsViewController.cappuccinoProjectController = self.currentCappuccinoProjectController; + self.errorsViewController.cappuccinoProjectController = self.currentCappuccinoProjectController; + self.settingsViewController.cappuccinoProjectController = self.currentCappuccinoProjectController; + + [self.operationsViewController reload]; + [self.errorsViewController reload]; + [self.settingsViewController reload]; + + [self _showMaskingView:(selectedIndex == -1)]; + + [self _saveSelectedProject]; + +} + +- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowsIndexes toPasteboard:(NSPasteboard*)pasteboard +{ + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowsIndexes]; + [pasteboard declareTypes:@[@"projects"] owner:self]; + [pasteboard setData:data forType:@"projects"]; + + return YES; +} + +- (NSDragOperation)tableView:(NSTableView*)tableView validateDrop:(id )info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)operation +{ + NSPasteboard *pboard = [info draggingPasteboard]; + + if ([pboard.types containsObject:(NSString *)NSFilenamesPboardType]) + { + NSArray *draggedFiles = [pboard propertyListForType:(NSString *)NSFilenamesPboardType]; + + for (NSString *file in draggedFiles) + { + BOOL isDir; + [[NSFileManager defaultManager] fileExistsAtPath:file isDirectory:&isDir]; + + if (!isDir) + return NSDragOperationNone; + } + + return NSDragOperationCopy; + } + else if ([pboard.types containsObject:@"projects"]) + { + if (operation == NSTableViewDropOn) + return NSDragOperationNone; + + return NSDragOperationMove; + } + else + { + return NSDragOperationNone; + } +} + +- (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id )info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation +{ + NSPasteboard *pboard = [info draggingPasteboard]; + + if ([pboard.types containsObject:(NSString *)NSFilenamesPboardType]) + { + NSArray *draggedFolders = [pboard propertyListForType:(NSString *)NSFilenamesPboardType]; + + for (NSString *folder in draggedFolders) + [self manageCappuccinoProjectControllerForPath:folder]; + + return YES; + } + else if ([pboard.types containsObject:@"projects"]) + { + NSData *rowData = [pboard dataForType:@"projects"]; + NSIndexSet *rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData]; + + [self.cappuccinoProjectControllers moveIndexes:rowIndexes toIndex:row]; + [self _reloadProjectsList]; + [self _saveManagedProjectsToUserDefaults]; + + return YES; + } + else + { + return NO; + } +} + +@end \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationDataView.h b/Tools/XcodeCapp/XcodeCapp/XCCOperationDataView.h new file mode 100644 index 000000000..7ceba2873 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationDataView.h @@ -0,0 +1,23 @@ +// +// OperationCellView.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/20/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCSourceProcessingOperation; + +@interface XCCOperationDataView : NSTableCellView +{ + IBOutlet NSBox *boxStatus; + IBOutlet NSTextField *fieldName; + IBOutlet NSTextField *fieldDescription; + +} + +@property XCCSourceProcessingOperation *operation; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationDataView.m b/Tools/XcodeCapp/XcodeCapp/XCCOperationDataView.m new file mode 100644 index 000000000..2065c54bc --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationDataView.m @@ -0,0 +1,69 @@ +// +// OperationCellView.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/20/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCOperationDataView.h" +#import "XCCSourceProcessingOperation.h" + +static NSColor * XCCOperationDataViewColorExecuting; +static NSColor * XCCOperationDataViewColorPending; +static NSColor * XCCOperationDataViewColorFinished; +static NSColor * XCCOperationDataViewColorCanceled; + + +@implementation XCCOperationDataView + ++ (void)initialize +{ + XCCOperationDataViewColorExecuting = [NSColor colorWithCalibratedRed:107.0/255.0 green:148.0/255.0 blue:236.0/255.0 alpha:1.0]; + XCCOperationDataViewColorPending = [NSColor colorWithCalibratedRed:236.0/255.0 green:236.0/255.0 blue:236.0/255.0 alpha:1.0]; + XCCOperationDataViewColorFinished = [NSColor colorWithCalibratedRed:179.0/255.0 green:214.0/255.0 blue:69.0/255.0 alpha:1.0]; + XCCOperationDataViewColorCanceled = [NSColor colorWithCalibratedRed:253.0/255.0 green:125/255.0 blue:8.0/255.0 alpha:1.0]; +} + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow +{ + if (newWindow) + { + [self _updateDataView]; + [self.operation addObserver:self forKeyPath:@"operationName" options:NSKeyValueObservingOptionNew context:nil]; + [self.operation addObserver:self forKeyPath:@"operationDescription" options:NSKeyValueObservingOptionNew context:nil]; + [self.operation addObserver:self forKeyPath:@"isExecuting" options:NSKeyValueObservingOptionNew context:nil]; + } + else + { + [self.operation removeObserver:self forKeyPath:@"operationName"]; + [self.operation removeObserver:self forKeyPath:@"operationDescription"]; + [self.operation removeObserver:self forKeyPath:@"isExecuting"]; + } +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(XCCSourceProcessingOperation *)operation change:(NSDictionary *)change context:(void *)context +{ + dispatch_async(dispatch_get_main_queue(), ^{ + [self _updateDataView]; + }); +} + +- (void)_updateDataView +{ + self->fieldName.stringValue = self.operation.operationName; + self->fieldDescription.stringValue = self.operation.operationDescription; + + if (self.operation.isExecuting) + self->boxStatus.fillColor = XCCOperationDataViewColorExecuting; + else if (self.operation.isCancelled) + self->boxStatus.fillColor = XCCOperationDataViewColorCanceled; + else if (self.operation.isFinished) + self->boxStatus.fillColor = XCCOperationDataViewColorFinished; + else + self->boxStatus.fillColor = XCCOperationDataViewColorPending; +} + +@end + + diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationError.h b/Tools/XcodeCapp/XcodeCapp/XCCOperationError.h new file mode 100644 index 000000000..97a85c41c --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationError.h @@ -0,0 +1,34 @@ +// +// OperationError.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/21/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, XCCOperationErrorType) +{ + XCCDefaultOperationErrorType, + XCCCappLintOperationErrorType, + XCCObjjOperationErrorType, + XCCObjj2ObjcSkeletonOperationErrorType, + XCCNib2CibOperationErrorType +}; + + +@interface XCCOperationError : NSObject + +@property (copy) NSString *fileName; +@property (copy) NSString *message; +@property (copy) NSString *command; +@property (copy) NSString *lineNumber; +@property int errorType; + ++ (NSArray *)operationErrorsFromObjj2ObjcSkeletonInfo:(NSDictionary*)info; ++ (NSArray *)operationErrorsFromObjjInfo:(NSDictionary*)info; ++ (NSArray *)operationErrorsFromCappLintInfo:(NSDictionary *)info; ++ (XCCOperationError *)operationErrorFromNib2CibInfo:(NSDictionary*)info; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationError.m b/Tools/XcodeCapp/XcodeCapp/XCCOperationError.m new file mode 100644 index 000000000..d2652020a --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationError.m @@ -0,0 +1,188 @@ +// +// OperationError.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/21/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCOperationError.h" + +static NSCharacterSet * XCCOperationErrorNonASCIICharactersSet; + +NSArray * parseCommandXMLString(NSString * aString) +{ + if (!XCCOperationErrorNonASCIICharactersSet) + { + NSMutableString *ASCIICharacters = [NSMutableString string]; + + for (NSInteger i = 32; i < 127; i++) + [ASCIICharacters appendFormat:@"%c", (char)i]; + + [ASCIICharacters appendString:@"\n\t"]; + + XCCOperationErrorNonASCIICharactersSet = [[NSCharacterSet characterSetWithCharactersInString:ASCIICharacters] invertedSet]; + + } + aString = [[aString componentsSeparatedByCharactersInSet:XCCOperationErrorNonASCIICharactersSet] componentsJoinedByString:@""]; + aString = [aString stringByReplacingOccurrencesOfString:@"[0m" withString:@""]; + + NSInteger i = 0; + while ((i < [aString length]) && [[NSCharacterSet newlineCharacterSet] characterIsMember:[aString characterAtIndex:i]]) + i++; + + NSArray *info; + + @try + { + info = [aString propertyList]; + } + @catch (NSException *exception) + { + info = @[ + @{ + @"lineNumber": @"0", + @"sourcePath": @"/Unknown", + @"message": [NSString stringWithFormat:@"Unable to parse: %@", aString] + } + ]; + } + + return info; +} + + + +@implementation XCCOperationError + +#pragma mark - Class Methods + ++ (instancetype)_operationErrorWithInfo:(NSDictionary*)info type:(int)type +{ + XCCOperationError *operationError = [self new]; + + operationError.fileName = info[@"sourcePath"]; + operationError.errorType = type; + + switch (type) + { + case XCCObjj2ObjcSkeletonOperationErrorType: + operationError.command = @"objj2objc2skeleton"; + operationError.lineNumber = info[@"line"]; + operationError.message = info[@"message"]; + break; + + case XCCObjjOperationErrorType: + operationError.command = @"objj"; + operationError.lineNumber = info[@"line"]; + operationError.message = info[@"message"]; + break; + + case XCCNib2CibOperationErrorType: + operationError.command = @"nib2cib"; + operationError.message = info[@"errors"]; + break; + + case XCCCappLintOperationErrorType: + operationError.command = @"capp_lint"; + operationError.message = info[@"message"]; + operationError.lineNumber = info[@"line"]; + break; + } + + return operationError; +} + ++ (NSArray*)operationErrorsFromObjj2ObjcSkeletonInfo:(NSDictionary*)info +{ + NSArray *errors = parseCommandXMLString(info[@"errors"]); + NSMutableArray *ret = [@[] mutableCopy]; + + for (NSDictionary *error in errors) + [ret addObject:[XCCOperationError _operationErrorWithInfo:error type:XCCObjj2ObjcSkeletonOperationErrorType]]; + + return ret; +} + ++ (NSArray*)operationErrorsFromObjjInfo:(NSDictionary*)info +{ + NSArray *errors = parseCommandXMLString(info[@"errors"]); + NSMutableArray *ret = [@[] mutableCopy]; + + for (NSDictionary *error in errors) + [ret addObject:[XCCOperationError _operationErrorWithInfo:error type:XCCObjjOperationErrorType]]; + + return ret; +} + ++ (NSArray*)operationErrorsFromCappLintInfo:(NSDictionary *)info +{ + NSString *response = info[@"errors"]; + NSString *sourcePath = info[@"sourcePath"]; + NSMutableArray *operationErrors = [@[] mutableCopy]; + NSMutableArray *errors = [[response componentsSeparatedByString:@"\n\n"] mutableCopy]; + + // We need to remove the first object who is the number of errors and the last object who is an empty line + [errors removeLastObject]; + [errors removeObjectAtIndex:0]; + + for (int i = 0; i < [errors count]; i++) + { + NSString *line; + NSMutableString *error = (NSMutableString*)errors[i]; + NSString *firstChar = [NSString stringWithFormat:@"%c" ,[error characterAtIndex:0]]; + + if ([[NSScanner scannerWithString:firstChar] scanInt:nil]) + error = (NSMutableString*)[NSString stringWithFormat:@"%@:%@", sourcePath, error]; + + NSInteger positionOfFirstColon = [error rangeOfString:@":"].location; + + NSString *errorWithoutPath = [error substringFromIndex:(positionOfFirstColon + 1)]; + NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; + line = [errorWithoutPath substringToIndex:positionOfSecondColon]; + + NSString *message = [NSString stringWithFormat:@"Code style issue at line %@ of file %@:\n%@", line, sourcePath.lastPathComponent, errorWithoutPath]; + + NSDictionary *info = @{@"line": line, + @"message": message, + @"sourcePath": sourcePath}; + + XCCOperationError *operationError = [XCCOperationError _operationErrorWithInfo:info type:XCCCappLintOperationErrorType]; + + [operationErrors addObject:operationError]; + } + + return operationErrors; +} + ++ (XCCOperationError *)operationErrorFromNib2CibInfo:(NSDictionary*)info +{ + return [XCCOperationError _operationErrorWithInfo:info type:XCCNib2CibOperationErrorType]; +} + + +#pragma mark - Overrides + +- (BOOL)isEqualTo:(XCCOperationError*)object +{ + return object.errorType == self.errorType && [object.fileName isEqualToString:self.fileName]; +} + +- (NSString*)description +{ + if (self.errorType == XCCNib2CibOperationErrorType) + return @"Converting Interface Files has failed"; + + if (self.errorType == XCCObjjOperationErrorType) + return @"Verifying compilation Warnings has failed"; + + if (self.errorType == XCCCappLintOperationErrorType) + return @"Verifying coding style has failed"; + + if (self.errorType == XCCObjj2ObjcSkeletonOperationErrorType) + return @"Creating Objective-C Class Pair has failed"; + + return @"An Unknown Error has been caught"; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorDataView.h b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorDataView.h new file mode 100644 index 000000000..bcb8ff926 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorDataView.h @@ -0,0 +1,24 @@ +// +// OperationErrorCellView.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/21/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCOperationError; + +@interface XCCOperationErrorDataView : NSTableCellView +{ + IBOutlet NSTextField *fieldMessage; + IBOutlet NSTextField *fieldLineNumber; + IBOutlet NSTextField *labelLineNumber; + IBOutlet NSImageView *imageViewType; +} + +@property IBOutlet NSButton *buttonOpenInEditor; +@property XCCOperationError *errorOperation; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorDataView.m b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorDataView.m new file mode 100644 index 000000000..37ce56feb --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorDataView.m @@ -0,0 +1,41 @@ +// +// OperationErrorCellView.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/21/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCOperationErrorDataView.h" +#import "XCCOperationError.h" + +@implementation XCCOperationErrorDataView + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow +{ + if (!newWindow) + return; + + if (self.errorOperation.message) + self->fieldMessage.stringValue = self.errorOperation.message; + else + self->fieldMessage.stringValue = @"No message"; + + if (self.errorOperation.lineNumber) + self->fieldLineNumber.stringValue = self.errorOperation.lineNumber; + else + self->fieldLineNumber.stringValue = @"0"; + + switch (self.errorOperation.errorType) + { + case XCCCappLintOperationErrorType: + case XCCNib2CibOperationErrorType: + [self->imageViewType setImage:[NSImage imageNamed:@"NSStatusPartiallyAvailable"]]; + break; + + default: + [self->imageViewType setImage:[NSImage imageNamed:@"NSStatusUnavailable"]]; + } +} + +@end \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorHeaderDataView.h b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorHeaderDataView.h new file mode 100644 index 000000000..b611e55f6 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorHeaderDataView.h @@ -0,0 +1,20 @@ +// +// OperationErrorHeaderCellView.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/22/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import +#import "XCCOperationError.h" + + +@interface XCCOperationErrorHeaderDataView : NSTableCellView +{ + IBOutlet NSTextField *fieldName; +} + +@property NSString *fileName; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorHeaderDataView.m b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorHeaderDataView.m new file mode 100644 index 000000000..55fa566ce --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationErrorHeaderDataView.m @@ -0,0 +1,24 @@ +// +// OperationErrorHeaderCellView.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/22/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCOperationErrorHeaderDataView.h" + + +@implementation XCCOperationErrorHeaderDataView + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow +{ + if (!newWindow) + return; + + if (self.fileName) + self->fieldName.stringValue = self.fileName; + else + self->fieldName.stringValue = @"No name"; +} +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h new file mode 100644 index 000000000..2b2cdc799 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h @@ -0,0 +1,27 @@ +// +// XCCOperationsViewController.h +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCCappuccinoProjectController; + + +@interface XCCOperationsViewController : NSViewController +{ + IBOutlet NSTableView *operationTableView; + IBOutlet NSBox *maskingView; + NSOperationQueue *operationQueue; + NSArray *operationsSnaphsot; +} + +@property XCCCappuccinoProjectController *cappuccinoProjectController; + +- (void)reload; +- (IBAction)cancelAllOperations:(id)sender; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m new file mode 100644 index 000000000..61d4e3747 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m @@ -0,0 +1,116 @@ +// +// XCCOperationsViewController.m +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCOperationsViewController.h" +#import "XCCCappuccinoProjectController.h" +#import "XCCCappuccinoProject.h" +#import "XCCOperationDataView.h" +#import "XCCSourcesFinderOperation.h" +#import "XCCSourceProcessingOperation.h" +#import "XCCPPXOperation.h" +#import "AppDelegate.h" + +@implementation XCCOperationsViewController + +@synthesize cappuccinoProjectController = _cappuccinoProjectController; + +#pragma nark - Initialization + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self->operationQueue = [((AppDelegate *)[NSApp delegate]) mainOperationQueue]; +} + + +#pragma nark - Utilities + +- (void)_showMaskingView:(BOOL)shouldShow +{ + if (shouldShow) + { + if (self->maskingView.superview) + return; + + [self->operationTableView setHidden:YES]; + + self->maskingView.frame = [self.view bounds]; + [self.view addSubview:self->maskingView]; + } + else + { + if (!self->maskingView.superview) + return; + + [self->operationTableView setHidden:NO]; + + [self->maskingView removeFromSuperview]; + } +} + +- (void)reload +{ + [self->operationTableView reloadData]; + + [self _showMaskingView:![self.cappuccinoProjectController projectRelatedOperations].count]; +} + + +#pragma mark - actions + +- (IBAction)cancelAllOperations:(id)sender +{ + [self.cappuccinoProjectController cancelAllOperations:sender]; + [self reload]; +} + + +#pragma mark - tableView delegate and datasource + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + // we create a snapshot at that moment, so if some operations are removed during the time between + // the count and reloadData, we don't crash. + self->operationsSnaphsot = [[[self.cappuccinoProjectController projectRelatedOperations] sortedArrayUsingComparator:^(NSOperation * op1, NSOperation * op2){ + + if (op1.isCancelled) + return NSOrderedDescending; + + if (op2.isCancelled) + return NSOrderedAscending; + + if ([op1.dependencies containsObject:op2]) + return NSOrderedDescending; + + if ([op2.dependencies containsObject:op1]) + return NSOrderedAscending; + + if (op1.isExecuting && !op2.isExecuting) + return NSOrderedAscending; + + if (!op1.isExecuting && op2.isExecuting) + return NSOrderedDescending; + + + + return NSOrderedSame; + }] copy]; + + return self->operationsSnaphsot.count; +} + +- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + XCCOperationDataView *dataView = [tableView makeViewWithIdentifier:@"OperationDataView" owner:nil]; + [dataView setOperation:self->operationsSnaphsot[row]]; + + return dataView; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.h b/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.h new file mode 100644 index 000000000..6582fdbc4 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.h @@ -0,0 +1,28 @@ +// +// XCCPbxCreationOperation.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 6/2/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import +#import "XCCAbstractOperation.h" + +@class XCCCappuccinoProject; +@class XCCTaskLauncher; + +extern NSString * const XCCPBXOperationDidStartNotification; +extern NSString * const XCCPbxCreationGenerateErrorNotification; +extern NSString * const XCCPBXOperationDidEndNotification; + +@interface XCCPPXOperation : XCCAbstractOperation +{ + NSMutableDictionary *PBXOperations; + NSTask *task; +} + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)aCappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher NS_DESIGNATED_INITIALIZER; +- (void)registerPathsToAddInPBX:(NSArray *)paths; +- (void)registerPathsToRemoveFromPBX:(NSArray *)paths; +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m b/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m new file mode 100644 index 000000000..1a47b3122 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m @@ -0,0 +1,126 @@ +// +// XCCPbxCreationOperation.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 6/2/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCPPXOperation.h" +#import "XCCCappuccinoProject.h" +#import "XCCTaskLauncher.h" + +NSString * const XCCPBXOperationDidStartNotification = @"XCCPbxCreationDidStartNotification"; +NSString * const XCCPbxCreationGenerateErrorNotification = @"XCCPbxCreationDidGenerateErrorNotification"; +NSString * const XCCPBXOperationDidEndNotification = @"XCCPbxCreationDidEndNotification"; + + +@implementation XCCPPXOperation + +#pragma mark - Initialization + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)aCappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher +{ + if (self = [super initWithCappuccinoProject:aCappuccinoProject taskLauncher:aTaskLauncher]) + { + self.operationDescription = self.cappuccinoProject.projectPath; + self.operationName = @"Updating the Xcode project"; + + self->PBXOperations = [@{} mutableCopy]; + self->PBXOperations[@"add"] = [@[] mutableCopy]; + self->PBXOperations[@"remove"] = [@[] mutableCopy]; + } + + return self; +} + + +#pragma mark - PBX Operations + +- (void)registerPathsToAddInPBX:(NSArray *)paths +{ + NSMutableArray *finalPaths = [@[] mutableCopy]; + + for (NSString *path in paths) + if ([XCCCappuccinoProject isObjjFile:path]) + [finalPaths addObject:path]; + + [self->PBXOperations[@"add"] addObjectsFromArray:finalPaths]; +} + +- (void)registerPathsToRemoveFromPBX:(NSArray *)paths +{ + [self->PBXOperations[@"remove"] addObjectsFromArray:paths]; +} + + +#pragma mark - NSOperation API + +- (void)cancel +{ + if (self->task.isRunning) + [self->task terminate]; + + [super cancel]; +} + + +- (void)main +{ + [self dispatchNotificationName:XCCPBXOperationDidStartNotification]; + + DDLogVerbose(@"Pbx creation started: %@", self.cappuccinoProject.projectPath); + + @try + { + BOOL shouldLaunchTask = NO; + NSMutableArray *arguments = [@[self.cappuccinoProject.PBXModifierScriptPath, @"update", self.cappuccinoProject.projectPath] mutableCopy]; + + for (NSString *action in self->PBXOperations) + { + NSArray *paths = self->PBXOperations[action]; + + if (paths.count) + { + [arguments addObject:action]; + [arguments addObjectsFromArray:paths]; + + shouldLaunchTask = YES; + } + + DDLogVerbose(@"PBX: path to %@ : %@", action, paths); + } + + if (shouldLaunchTask) + { + self->task = [self->taskLauncher taskWithCommand:@"python" arguments:arguments]; + + NSDictionary *result = [self->taskLauncher runTask:self->task returnType:kTaskReturnTypeStdError]; + + if ([result[@"status"] intValue] != 0) + { + NSMutableDictionary *info = [self operationInformations]; + info[@"errors"] = result[@"message"]; + + [self dispatchNotificationName:XCCPbxCreationGenerateErrorNotification userInfo:info]; + } + } + } + @catch (NSException *exception) + { + [self dispatchNotificationName:XCCPbxCreationGenerateErrorNotification]; + DDLogVerbose(@"Pbx creation failed: %@", exception); + } + @finally + { + __block XCCPPXOperation *weakOperation = self; + + self.completionBlock = ^{ + [weakOperation dispatchNotificationName:XCCPBXOperationDidEndNotification]; + }; + } + + DDLogVerbose(@"Pbx creation ended: %@", self.cappuccinoProject.projectPath); +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCPath.h b/Tools/XcodeCapp/XcodeCapp/XCCPath.h new file mode 100644 index 000000000..393e815ba --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCPath.h @@ -0,0 +1,17 @@ +// +// Path.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/20/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@interface XCCPath : NSObject + +@property NSString *name; + +- (instancetype)initWithName:(NSString*)aName NS_DESIGNATED_INITIALIZER; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCPath.m b/Tools/XcodeCapp/XcodeCapp/XCCPath.m new file mode 100644 index 000000000..d3555c25e --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCPath.m @@ -0,0 +1,26 @@ +// +// Path.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/20/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCPath.h" + +@implementation XCCPath + +- (instancetype)initWithName:(NSString*)aName +{ + if (self = [super init]) + self.name = aName; + + return self; +} + +- (instancetype)init +{ + return [self initWithName:@"~/bin"]; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSettingsViewController.h b/Tools/XcodeCapp/XcodeCapp/XCCSettingsViewController.h new file mode 100644 index 000000000..fb7388a8d --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSettingsViewController.h @@ -0,0 +1,31 @@ +// +// XCCSettingsViewController.h +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCCappuccinoProjectController; + + +@interface XCCSettingsViewController : NSViewController +{ + IBOutlet NSTableView *tableViewBinaryPaths; + IBOutlet NSButton *checkBoxProcessNib2Cib; + IBOutlet NSButton *checkBoxProcessObjj; + IBOutlet NSButton *checkBoxProcessObjj2Skeleton; + IBOutlet NSButton *checkBoxProcessCappLint; + IBOutlet NSTextField *fieldObjjIncludePath; + IBOutlet NSTextField *fieldXcodeCappIgnoreContent; + + BOOL isObserving; +} + +@property XCCCappuccinoProjectController *cappuccinoProjectController; + +- (void)reload; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSettingsViewController.m b/Tools/XcodeCapp/XcodeCapp/XCCSettingsViewController.m new file mode 100644 index 000000000..98faea416 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSettingsViewController.m @@ -0,0 +1,155 @@ +// +// XCCSettingsViewController.m +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCSettingsViewController.h" +#import "XCCCappuccinoProjectController.h" +#import "XCCCappuccinoProject.h" +#import "XCCPath.h" + +@implementation XCCSettingsViewController + +@synthesize cappuccinoProjectController = _cappuccinoProjectController; + + +#pragma Initialization + +- (void)viewDidLoad +{ + [super viewDidLoad]; +} + + +#pragma Utilities + +- (void)reload +{ + XCCCappuccinoProject * project = self.cappuccinoProjectController.cappuccinoProject; + + if (project) + { + [self->fieldXcodeCappIgnoreContent bind:NSValueBinding toObject:project withKeyPath:@"XcodeCappIgnoreContent" options:nil]; + [self->fieldObjjIncludePath bind:NSValueBinding toObject:project withKeyPath:@"objjIncludePath" options:nil]; + [self->checkBoxProcessObjj2Skeleton bind:NSValueBinding toObject:project withKeyPath:@"processObjj2ObjcSkeleton" options:nil]; + [self->checkBoxProcessNib2Cib bind:NSValueBinding toObject:project withKeyPath:@"processNib2Cib" options:nil]; + [self->checkBoxProcessObjj bind:NSValueBinding toObject:project withKeyPath:@"processObjjWarnings" options:nil]; + [self->checkBoxProcessCappLint bind:NSValueBinding toObject:project withKeyPath:@"processCappLint" options:nil]; + } + else + { + [self->fieldXcodeCappIgnoreContent unbind:NSValueBinding]; + [self->fieldObjjIncludePath unbind:NSValueBinding]; + [self->checkBoxProcessObjj2Skeleton unbind:NSValueBinding]; + [self->checkBoxProcessNib2Cib unbind:NSValueBinding]; + [self->checkBoxProcessObjj unbind:NSValueBinding]; + [self->checkBoxProcessCappLint unbind:NSValueBinding]; + } + + [self->tableViewBinaryPaths reloadData]; +} + + +#pragma mark - Custom Getters and Setters + +- (void)setCappuccinoProjectController:(XCCCappuccinoProjectController *)cappuccinoProjectController +{ + if ([cappuccinoProjectController isEqualTo:_cappuccinoProjectController]) + return; + + [self _removeObservers]; + [self willChangeValueForKey:@"cappuccinoProjectController"]; + _cappuccinoProjectController = cappuccinoProjectController; + [self didChangeValueForKey:@"cappuccinoProjectController"]; + [self _addObservers]; +} + +- (XCCCappuccinoProjectController*)cappuccinoProjectController +{ + return _cappuccinoProjectController; +} + + +#pragma mark - Observers + +- (void)_addObservers +{ + if (self->isObserving) + return; + + self->isObserving = YES; + + [self.cappuccinoProjectController addObserver:self forKeyPath:@"cappuccinoProject.nickname" options:NSKeyValueObservingOptionNew context:nil]; + [self.cappuccinoProjectController addObserver:self forKeyPath:@"cappuccinoProject.XcodeCappIgnoreContent" options:NSKeyValueObservingOptionNew context:nil]; + [self.cappuccinoProjectController addObserver:self forKeyPath:@"cappuccinoProject.processObjj2ObjcSkeleton" options:NSKeyValueObservingOptionNew context:nil]; + [self.cappuccinoProjectController addObserver:self forKeyPath:@"cappuccinoProject.processNib2Cib" options:NSKeyValueObservingOptionNew context:nil]; + [self.cappuccinoProjectController addObserver:self forKeyPath:@"cappuccinoProject.processObjjWarnings" options:NSKeyValueObservingOptionNew context:nil]; + [self.cappuccinoProjectController addObserver:self forKeyPath:@"cappuccinoProject.processCappLint" options:NSKeyValueObservingOptionNew context:nil]; +} + +- (void)_removeObservers +{ + if (!self->isObserving) + return; + + self->isObserving = NO; + + [self.cappuccinoProjectController removeObserver:self forKeyPath:@"cappuccinoProject.nickname"]; + [self.cappuccinoProjectController removeObserver:self forKeyPath:@"cappuccinoProject.XcodeCappIgnoreContent"]; + [self.cappuccinoProjectController removeObserver:self forKeyPath:@"cappuccinoProject.processObjj2ObjcSkeleton"]; + [self.cappuccinoProjectController removeObserver:self forKeyPath:@"cappuccinoProject.processNib2Cib"]; + [self.cappuccinoProjectController removeObserver:self forKeyPath:@"cappuccinoProject.processObjjWarnings"]; + [self.cappuccinoProjectController removeObserver:self forKeyPath:@"cappuccinoProject.processCappLint"]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(XCCCappuccinoProjectController *)projectController change:(NSDictionary *)change context:(void *)context +{ + if ([keyPath isEqualToString:@"XcodeCappIgnoreContent"]) + [projectController reinitializeProjectFromSettings]; + else + [projectController.cappuccinoProject saveSettings]; +} + + +#pragma mark - Actions + +- (IBAction)addBinaryPath:(id)sender +{ + [self.cappuccinoProjectController.cappuccinoProject.binaryPaths addObject:[XCCPath new]]; + [self->tableViewBinaryPaths reloadData]; + + [self.cappuccinoProjectController reinitializeProjectFromSettings]; +} + +- (IBAction)removeSelectedBinaryPaths:(id)sender +{ + [self.cappuccinoProjectController.cappuccinoProject.binaryPaths removeObjectsAtIndexes:[self->tableViewBinaryPaths selectedRowIndexes]]; + [self->tableViewBinaryPaths reloadData]; + + [self.cappuccinoProjectController reinitializeProjectFromSettings]; +} + + +#pragma mark - tableView delegate and datasource + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView +{ + return self.cappuccinoProjectController.cappuccinoProject.binaryPaths.count; +} + +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + return ((XCCPath *)(self.cappuccinoProjectController.cappuccinoProject.binaryPaths)[row]).name; +} + +- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + ((XCCPath *)(self.cappuccinoProjectController.cappuccinoProject.binaryPaths)[row]).name = value; + + [self.cappuccinoProjectController reinitializeProjectFromSettings]; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.h b/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.h new file mode 100644 index 000000000..5a10961a4 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.h @@ -0,0 +1,40 @@ +// +// ProcessSourceOperation.h +// XcodeCapp +// +// Created by Aparajita on 4/27/13. +// Copyright (c) 2013 Cappuccino Project. All rights reserved. +// + +#import +#import "XCCAbstractOperation.h" + +@class XCCCappuccinoProject; +@class XCCTaskLauncher; + +extern NSString * const XCCConversionDidStartNotification; +extern NSString * const XCCConversionDidEndNotification; +extern NSString * const XCCObjjDidStartNotification; +extern NSString * const XCCObjjDidEndNotification; +extern NSString * const XCCCappLintDidStartNotification; +extern NSString * const XCCCappLintDidEndNotification; +extern NSString * const XCCObjj2ObjcSkeletonDidStartNotification; +extern NSString * const XCCObjj2ObjcSkeletonDidEndNotification; +extern NSString * const XCCNib2CibDidStartNotification; +extern NSString * const XCCNib2CibDidEndNotification; +extern NSString * const XCCObjjDidGenerateErrorNotification; +extern NSString * const XCCCappLintDidGenerateErrorNotification; +extern NSString * const XCCObjj2ObjcSkeletonDidGenerateErrorNotification; +extern NSString * const XCCNib2CibDidGenerateErrorNotification; + + +@interface XCCSourceProcessingOperation : XCCAbstractOperation +{ + NSTask *task; +} + +@property NSString *sourcePath; + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)aCappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher sourcePath:(NSString *)sourcePath; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m b/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m new file mode 100644 index 000000000..c16cfe606 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m @@ -0,0 +1,228 @@ + +// ProcessSourceOperation.m +// XcodeCapp +// +// Created by Aparajita on 4/27/13. +// Copyright (c) 2013 Cappuccino Project. All rights reserved. +// + +#import "XCCSourceProcessingOperation.h" +#import "XCCTaskLauncher.h" + +NSString * const XCCConversionDidEndNotification = @"XCCConversionDidStopNotification"; +NSString * const XCCConversionDidStartNotification = @"XCCConversionDidStartNotification"; +NSString * const XCCObjjDidStartNotification = @"XCCObjjDidStartNotification"; +NSString * const XCCObjjDidGenerateErrorNotification = @"XCCObjjDidGenerateErrorNotification"; +NSString * const XCCObjjDidEndNotification = @"XCCObjjDidEndNotification"; +NSString * const XCCCappLintDidStartNotification = @"XCCCappLintDidStartNotification"; +NSString * const XCCCappLintDidGenerateErrorNotification = @"XCCCappLintDidGenerateErrorNotification"; +NSString * const XCCCappLintDidEndNotification = @"XCCCappLintDidEndNotification"; +NSString * const XCCObjj2ObjcSkeletonDidStartNotification = @"XCCObjj2ObjcSkeletonDidStartNotification"; +NSString * const XCCObjj2ObjcSkeletonDidGenerateErrorNotification = @"XCCObjj2ObjcSkeletonDidGenerateErrorNotification"; +NSString * const XCCObjj2ObjcSkeletonDidEndNotification = @"XCCObjj2ObjcSkeletonDidEndNotification"; +NSString * const XCCNib2CibDidStartNotification = @"XCCNib2CibDidStartNotification"; +NSString * const XCCNib2CibDidGenerateErrorNotification = @"XCCNib2CibDidGenerateErrorNotification"; +NSString * const XCCNib2CibDidEndNotification = @"XCCNib2CibDidEndNotification"; + + +@implementation XCCSourceProcessingOperation + + +#pragma mark - Initialization + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)aCappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher sourcePath:(NSString *)sourcePath +{ + if (self = [super initWithCappuccinoProject:aCappuccinoProject taskLauncher:aTaskLauncher]) + { + NSString *projectPath = [NSString stringWithFormat:@"%@/", self.cappuccinoProject.projectPath]; + + self.sourcePath = sourcePath; + self.operationName = @"Pending source processing"; + self.operationDescription = [self.sourcePath stringByReplacingOccurrencesOfString:projectPath withString:@""]; + } + + return self; +} + + +#pragma mark - Utilities + +- (NSMutableDictionary *)operationInformations +{ + NSMutableDictionary *info = [super operationInformations]; + + info[@"sourcePath"] = self.sourcePath; + + return info; +} + +- (void)_updateOperationInformation +{ + NSString *commandName = self->task.launchPath.lastPathComponent; + + if ([commandName isEqualToString:@"objj2objcskeleton"]) + self.operationName = @"Creating Objective-C Class Pair"; + + else if ([commandName isEqualToString:@"nib2cib"]) + self.operationName = @"Converting Interface Files"; + + else if ([commandName isEqualToString:@"objj"]) + self.operationName = @"Verifying compilation Warnings"; + + else if ([commandName isEqualToString:@"capp_lint"]) + self.operationName = @"Verifying coding style"; + else + self.operationName = commandName; +} + +- (void)_postProcessingErrorNotificationName:(NSString *)notificationName error:(NSString *)errors +{ + if (self.isCancelled) + return; + + if (errors.length == 0) + errors = @"An unspecified error occurred"; + + NSMutableDictionary *info = [self operationInformations]; + info[@"errors"] = errors; + + [self dispatchNotificationName:notificationName userInfo:info]; +} + +- (NSDictionary*)_launchTaskWithCommand:(NSString*)aCommand arguments:(NSArray*)arguments +{ + DDLogVerbose(@"Running processing task: %@ on file: %@", aCommand, self.sourcePath); + + self->task = [self->taskLauncher taskWithCommand:aCommand arguments:arguments]; + + [self _updateOperationInformation]; + + return [self->taskLauncher runTask:self->task returnType:kTaskReturnTypeAny]; +} + + +#pragma Task Launcher + +- (BOOL)launchObjj2ObjcSkeletonCommandForPath:(NSString*)aPath +{ + [self dispatchNotificationName:XCCObjj2ObjcSkeletonDidStartNotification]; + + NSString *targetName = [self.cappuccinoProject flattenedXcodeSupportFileNameForPath:aPath]; + NSArray *arguments = @[aPath, self.cappuccinoProject.supportPath, @"-n", targetName]; + NSDictionary *result = [self _launchTaskWithCommand:@"objj2objcskeleton" arguments:arguments]; + int code = [result[@"status"] intValue]; + + if (code != 0) + [self _postProcessingErrorNotificationName:XCCObjj2ObjcSkeletonDidGenerateErrorNotification error:result[@"response"]]; + + [self dispatchNotificationName:XCCObjj2ObjcSkeletonDidEndNotification]; + + return code == 0; +} + +- (BOOL)launchNib2CibCommandForPath:(NSString*)aPath +{ + [self dispatchNotificationName:XCCNib2CibDidStartNotification]; + + NSArray *arguments = @[@"--no-colors", self.sourcePath]; + NSDictionary *result = [self _launchTaskWithCommand:@"nib2cib" arguments:arguments]; + int code = [result[@"status"] intValue]; + + if (code != 0) + [self _postProcessingErrorNotificationName:XCCNib2CibDidGenerateErrorNotification error:result[@"response"]]; + + [self dispatchNotificationName:XCCNib2CibDidEndNotification]; + + return code == 0; +} + +- (BOOL)launchObjjCommandForPath:(NSString*)aPath +{ + [self dispatchNotificationName:XCCObjjDidStartNotification]; + + NSArray *arguments = @[@"--xml", @"-I", [self.cappuccinoProject objjIncludePath], self.sourcePath]; + NSDictionary *result = [self _launchTaskWithCommand:@"objj" arguments:arguments]; + int code = [result[@"status"] intValue]; + + if (code != 0) + [self _postProcessingErrorNotificationName:XCCObjjDidGenerateErrorNotification error:result[@"response"]]; + + [self dispatchNotificationName:XCCObjjDidEndNotification]; + + return code == 0; +} + +- (BOOL)launchCappLintCommandForPath:(NSString*)aPath +{ + [self dispatchNotificationName:XCCCappLintDidStartNotification]; + + NSString *baseDirectory = [NSString stringWithFormat:@"--basedir='%@'", self.cappuccinoProject.projectPath]; + NSArray *arguments = @[baseDirectory, self.sourcePath]; + NSDictionary *result = [self _launchTaskWithCommand:@"capp_lint" arguments:arguments]; + int code = [result[@"status"] intValue]; + + if (code != 0) + [self _postProcessingErrorNotificationName:XCCCappLintDidGenerateErrorNotification error:result[@"response"]]; + + [self dispatchNotificationName:XCCCappLintDidEndNotification]; + + return code == 0; +} + + +#pragma mark - NSOperation Protocol + +- (void)cancel +{ + if (self->task.isRunning) + [self->task terminate]; + + self.operationName = @"Canceled source processing"; + + [super cancel]; +} + +- (void)main +{ + DDLogVerbose(@"Conversion started: %@", self.sourcePath); + + [self dispatchNotificationName:XCCConversionDidStartNotification]; + + @try + { + if ([XCCCappuccinoProject isXibFile:self.sourcePath]) + { + if (self.cappuccinoProject.processNib2Cib) + [self launchNib2CibCommandForPath:self.sourcePath]; + } + else if ([XCCCappuccinoProject isObjjFile:self.sourcePath]) + { + BOOL shouldContinue = YES; + + if (self.cappuccinoProject.processObjj2ObjcSkeleton) + shouldContinue = [self launchObjj2ObjcSkeletonCommandForPath:self.sourcePath]; + + if (shouldContinue && self.cappuccinoProject.processObjjWarnings) + shouldContinue = [self launchObjjCommandForPath:self.sourcePath]; + + if (shouldContinue && self.cappuccinoProject.processCappLint) + [self launchCappLintCommandForPath:self.sourcePath]; + } + } + @catch (NSException *exception) + { + DDLogVerbose(@"Conversion failed: %@", exception); + } + @finally + { + __block XCCSourceProcessingOperation *weakOperation = self; + + self.completionBlock = ^{ + [weakOperation dispatchNotificationName:XCCConversionDidEndNotification]; + }; + } + + DDLogVerbose(@"Conversion ended: %@", self.sourcePath); +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.h b/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.h new file mode 100644 index 000000000..56e6f1a1e --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.h @@ -0,0 +1,27 @@ +// +// FindSourceFilesOperation.h +// XcodeCapp +// +// Created by Aparajita on 4/27/13. +// Copyright (c) 2013 Cappuccino Project. All rights reserved. +// + +#import +#import "XCCAbstractOperation.h" + +@class XCCCappuccinoProject; +@class XCCTaskLauncher; + +extern NSString * const XCCNeedSourceToProjectPathMappingNotification; +extern NSString * const XCCSourcesFinderOperationDidStartNotification; +extern NSString * const XCCSourcesFinderOperationDidEndNotification; + + +@interface XCCSourcesFinderOperation : XCCAbstractOperation +{ + NSString *searchPath; +} + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)cappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher sourcePath:(NSString *)sourcePath; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m b/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m new file mode 100644 index 000000000..844eb7a4b --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m @@ -0,0 +1,169 @@ +// +// FindSourceFilesOperation.m +// XcodeCapp +// +// Created by Aparajita on 4/27/13. +// Copyright (c) 2013 Cappuccino Project. All rights reserved. +// + +#import "XCCSourcesFinderOperation.h" +#import "XCCSourceProcessingOperation.h" +#import "XCCTaskLauncher.h" + +NSString * const XCCSourcesFinderOperationDidStartNotification = @"XCCSourcesFinderOperationDidStartNotification"; +NSString * const XCCSourcesFinderOperationDidEndNotification = @"XCCSourcesFinderOperationDidEndNotification"; +NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSourceToProjectPathMappingNotification"; + + +@implementation XCCSourcesFinderOperation + + +#pragma mark - Initialization + +- (instancetype)initWithCappuccinoProject:(XCCCappuccinoProject *)aCappuccinoProject taskLauncher:(XCCTaskLauncher*)aTaskLauncher sourcePath:(NSString *)sourcePath +{ + if (self = [super initWithCappuccinoProject:aCappuccinoProject taskLauncher:aTaskLauncher]) + { + self.operationName = @"Searching for Objective-J files"; + self.operationDescription = self.cappuccinoProject.name; + self->searchPath = sourcePath; + } + + return self; +} + + +#pragma mark - Utilities + +- (NSArray *)_findSourceFilesAtProjectPath:(NSString *)aProjectPath +{ + NSError *error = NULL; + NSString *projectPath = [self.cappuccinoProject.projectPath stringByAppendingPathComponent:aProjectPath]; + NSFileManager *fm = [NSFileManager defaultManager]; + NSMutableArray *sourcePaths = [@[] mutableCopy]; + + NSArray *urls = [fm contentsOfDirectoryAtURL:[NSURL fileURLWithPath:projectPath.stringByResolvingSymlinksInPath] + includingPropertiesForKeys:@[NSURLIsDirectoryKey, NSURLIsSymbolicLinkKey] + options:NSDirectoryEnumerationSkipsHiddenFiles | NSDirectoryEnumerationSkipsPackageDescendants | NSDirectoryEnumerationSkipsSubdirectoryDescendants + error:&error]; + + if (!urls) + return [@[] mutableCopy]; + + for (NSURL *url in urls) + { + NSString *filename = url.lastPathComponent; + NSString *projectRelativePath = [aProjectPath stringByAppendingPathComponent:filename]; + NSString *realPath = url.path; + NSURL *resolvedURL = url; + NSNumber *isDirectory; + NSNumber *isSymlink; + + [url getResourceValue:&isSymlink forKey:NSURLIsSymbolicLinkKey error:nil]; + + if (isSymlink.boolValue == YES) + { + resolvedURL = [url URLByResolvingSymlinksInPath]; + + if ([resolvedURL checkResourceIsReachableAndReturnError:nil]) + { + filename = resolvedURL.lastPathComponent; + realPath = resolvedURL.path; + } + else + continue; + } + + [resolvedURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil]; + + if (isDirectory.boolValue == YES) + { + if ([XCCCappuccinoProject shouldIgnoreDirectoryNamed:filename]) + { + DDLogVerbose(@"%@: ignored symlinked directory: %@", self.cappuccinoProject.name, projectRelativePath); + continue; + } + + // If the resolved path is not within the project directory and is not ignored, add a mapping to it + // so we can map the resolved path back to the project directory later. + if (isSymlink.boolValue == YES) + { + NSString *fullProjectPath = [self.cappuccinoProject.projectPath stringByAppendingPathComponent:projectRelativePath]; + + if (![realPath hasPrefix:fullProjectPath] && ![XCCCappuccinoProject pathMatchesIgnoredPaths:fullProjectPath cappuccinoProjectIgnoredPathPredicates:self.cappuccinoProject.ignoredPathPredicates]) + { + DDLogVerbose(@"%@: symlinked directory: %@ -> %@", self.cappuccinoProject.name, projectRelativePath, realPath); + + NSMutableDictionary *info = [self operationInformations]; + info[@"sourcePath"] = realPath; + info[@"projectPath"] = fullProjectPath; + + [self dispatchNotificationName:XCCNeedSourceToProjectPathMappingNotification userInfo:info]; + } + else + DDLogVerbose(@"%@: ignored symlinked directory: %@", self.cappuccinoProject.name, projectRelativePath); + } + + DDLogVerbose(@"%@: found directory. checking for source files: %@", self.cappuccinoProject.name, filename); + + [sourcePaths addObjectsFromArray:[self _findSourceFilesAtProjectPath:projectRelativePath]]; + continue; + } + + if ([XCCCappuccinoProject pathMatchesIgnoredPaths:realPath cappuccinoProjectIgnoredPathPredicates:self.cappuccinoProject.ignoredPathPredicates]) + continue; + + NSString *projectSourcePath = [self.cappuccinoProject.projectPath stringByAppendingPathComponent:projectRelativePath]; + + if ([XCCCappuccinoProject isObjjFile:filename] || [XCCCappuccinoProject isXibFile:filename]) + { + DDLogVerbose(@"%@: found source file: %@", self.cappuccinoProject.name, filename); + + NSString *processedPath; + + if ([XCCCappuccinoProject isObjjFile:filename]) + processedPath = [[self.cappuccinoProject shadowBasePathForProjectSourcePath:projectSourcePath] stringByAppendingPathExtension:@"h"]; + else + processedPath = [projectSourcePath.stringByDeletingPathExtension stringByAppendingPathExtension:@"cib"]; + + if (![fm fileExistsAtPath:processedPath]) + [sourcePaths addObject:projectSourcePath]; + } + } + + return sourcePaths; +} + + +#pragma mark - NSOperation API + +- (void)main +{ + DDLogVerbose(@"Finding source files started"); + + NSArray *sourcesPaths; + + [self dispatchNotificationName:XCCSourcesFinderOperationDidStartNotification userInfo:@{@"cappuccinoProject": self.cappuccinoProject, @"sourcePaths" : @[]}]; + + @try + { + sourcesPaths = [self _findSourceFilesAtProjectPath:self->searchPath]; + } + @catch (NSException *exception) + { + DDLogVerbose(@"Finding source files failed: %@", exception); + } + @finally + { + __block XCCSourcesFinderOperation *weakOperation = self; + __block NSArray * weakSourcesPaths = sourcesPaths; + + self.completionBlock = ^{ + [weakOperation dispatchNotificationName:XCCSourcesFinderOperationDidEndNotification userInfo:@{@"cappuccinoProject": weakOperation.cappuccinoProject, @"sourcePaths" : weakSourcesPaths}]; + }; + } + + DDLogVerbose(@"Finding source files ended"); +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.h b/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.h new file mode 100644 index 000000000..5b6d0fe56 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.h @@ -0,0 +1,40 @@ +// +// TaskLauncher.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/6/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, XCCTaskReturnType) +{ + kTaskReturnTypeNone, + kTaskReturnTypeStdOut, + kTaskReturnTypeStdError, + kTaskReturnTypeAny +}; + + +@interface XCCTaskLauncher : NSObject + +@property BOOL isValid; + +@property NSMutableArray *binaryPaths; +@property NSMutableDictionary *environment; + +@property NSArray *executables; +@property NSMutableDictionary *executablePaths; + +- (instancetype)initWithEnvironmentPaths:(NSArray*)environementPaths NS_DESIGNATED_INITIALIZER; + +- (NSTask*)taskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments; +- (NSTask*)taskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments currentDirectoryPath:(NSString*)aCurrentDirectoryPath; + +- (NSDictionary *)runTaskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType; +- (NSDictionary *)runTaskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType currentDirectoryPath:(NSString*)aCurrentDirectoryPath; +- (NSDictionary*)runTask:(NSTask*)aTask returnType:(XCCTaskReturnType)returnType; +- (NSDictionary*)runJakeTaskWithArguments:(NSMutableArray*)arguments currentDirectoryPath:(NSString*)aCurrentDirectoryPath; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.m b/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.m new file mode 100644 index 000000000..318fa2caf --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.m @@ -0,0 +1,246 @@ +// +// TaskLaunch.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/6/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCTaskLauncher.h" + +@implementation XCCTaskLauncher + +- (instancetype)init +{ + return [self initWithEnvironmentPaths:@[]]; +} + +- (instancetype)initWithEnvironmentPaths:(NSArray*)environementPaths +{ + if (self = [super init]) + { + // Add possible executable paths to PATH + self.environment = [NSProcessInfo processInfo].environment.mutableCopy; + self.binaryPaths = [environementPaths mutableCopy]; + + [self.binaryPaths addObject:@"/usr/bin"]; + [self.binaryPaths addObject:@"/usr/local/bin"]; + [self.binaryPaths addObject:@"~/bin"]; + [self.binaryPaths addObject:@"/usr/local/narwhal/bin"]; + [self.binaryPaths addObject:@"~/narwhal/bin"]; + + DDLogError(@"Init task manager with environements %@", self.binaryPaths); + + NSMutableArray *paths = [self.binaryPaths mutableCopy]; + + for (NSInteger i = 0; i < paths.count; ++i) + paths[i] = [paths[i] stringByExpandingTildeInPath]; + + self.environment[@"PATH"] = [[paths componentsJoinedByString:@":"] stringByAppendingFormat:@":%@", self.environment[@"PATH"]]; + self.environment[@"NARWHAL_ENGINE"] = @"jsc"; + self.environment[@"CAPP_NOSUDO"] = @"1"; + + self.executables = @[@"python", @"objj", @"nib2cib",@"objj2objcskeleton", @"capp_lint", @"touch"]; + + self.isValid = [self _checkExecutables]; + } + + return self; +} + +- (BOOL)_checkExecutables +{ + NSMutableArray *arguments = [@[] mutableCopy]; + + [arguments addObject:[[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"supawhich"]]; + [arguments addObjectsFromArray:self.executables]; + + NSDictionary *taskResult = [self runTaskWithCommand:@"/bin/bash" arguments:arguments returnType:kTaskReturnTypeStdOut]; + + if ([taskResult[@"status"] integerValue] != 0) + { + DDLogError(@"Could not find executable in PATH: %@", self.environment[@"PATH"]); + return NO; + } + + self.executablePaths = (NSMutableDictionary*)[NSJSONSerialization JSONObjectWithData:[taskResult[@"response"] dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]; + + DDLogVerbose(@"Executable paths: %@", self.executablePaths); + + return YES; +} + +- (NSTask*)taskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments +{ + return [self taskWithCommand:aCommand arguments:arguments currentDirectoryPath:nil]; +} + +- (NSTask*)taskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments currentDirectoryPath:(NSString*)aCurrentDirectoryPath +{ + NSTask *task = [NSTask new]; + + // TODO : need to change + NSString *launchPath = self.executablePaths[aCommand]; + + if (!launchPath) + launchPath = aCommand; + + task.launchPath = launchPath; + task.arguments = arguments; + task.environment = self.environment; + task.standardOutput = [NSPipe pipe]; + task.standardError = [NSPipe pipe]; + + if (aCurrentDirectoryPath) + task.currentDirectoryPath = aCurrentDirectoryPath; + + return task; +} + +/*! + Run an NSTask with the given arguments + + @param aCommand The command to launch + @param arguments NSArray containing the NSTask arguments + @param returnType Determines whether to return stdout, stderr, either, or nothing in the response + @return NSDictionary containing the return status (NSNumber) and the response (NSString) + */ +- (NSDictionary *)runTaskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType +{ + return [self runTaskWithCommand:aCommand arguments:arguments returnType:returnType currentDirectoryPath:nil]; +} + +/*! + Run an NSTask with the given arguments + + @param aCommand The command to launch + @param arguments NSArray containing the NSTask arguments + @param returnType Determines whether to return stdout, stderr, either, or nothing in the response + @param the currentDirectoryPath for the task + @return NSDictionary containing the return status (NSNumber) and the response (NSString) + */ +- (NSDictionary *)runTaskWithCommand:(NSString *)aCommand arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType currentDirectoryPath:(NSString*)aCurrentDirectoryPath +{ + NSTask *task = [NSTask new]; + + // TODO : need to change + NSString *launchPath = self.executablePaths[aCommand]; + + if (!launchPath) + launchPath = aCommand; + + task.launchPath = launchPath; + task.arguments = arguments; + task.environment = self.environment; + task.standardOutput = [NSPipe pipe]; + task.standardError = [NSPipe pipe]; + + if (aCurrentDirectoryPath) + task.currentDirectoryPath = aCurrentDirectoryPath; + + return [self runTask:task returnType:returnType]; +} + +- (NSDictionary*)runTask:(NSTask*)aTask returnType:(XCCTaskReturnType)returnType +{ + [aTask launch]; + + DDLogVerbose(@"Task launched: %@\n%@", aTask.launchPath, aTask.arguments); + + if (returnType != kTaskReturnTypeNone) + { + [aTask waitUntilExit]; + + DDLogVerbose(@"Task exited: %@\n%@\nExit code:%d", aTask.launchPath, aTask.arguments, aTask.terminationStatus); + + NSData *data = nil; + + if (returnType == kTaskReturnTypeStdOut || returnType == kTaskReturnTypeAny) + data = [[aTask.standardOutput fileHandleForReading] readDataToEndOfFile]; + + if (returnType == kTaskReturnTypeStdError || (returnType == kTaskReturnTypeAny && [data length] == 0)) + data = [[aTask.standardError fileHandleForReading] readDataToEndOfFile]; + + NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSNumber *status = @(aTask.terminationStatus); + + return @{ @"status":status, @"response":response }; + } + + return @{ @"status":@0, @"response":@"" }; +} + +/*! + Run a jake NSTask with the given arguments + + @param arguments NSArray containing the NSTask arguments + @param the currentDirectoryPath for the task + @return NSDictionary containing the return status (NSNumber) and the response (NSString) + */ +- (NSDictionary*)runJakeTaskWithArguments:(NSMutableArray*)arguments currentDirectoryPath:(NSString*)aCurrentDirectoryPath +{ + NSString *launchPath = self.executablePaths[@"jake"]; + + NSTask *task = [NSTask new]; + + task.launchPath = launchPath; + task.arguments = arguments; + task.environment = self.environment; + task.standardOutput = [NSPipe new]; + task.standardError = [NSPipe new]; + + if (aCurrentDirectoryPath) + task.currentDirectoryPath = aCurrentDirectoryPath; + + // This is needed to log the jake + NSFileHandle* fhOut = [task.standardOutput fileHandleForReading]; + [fhOut readInBackgroundAndNotify]; + NSFileHandle* fhErr = [task.standardError fileHandleForReading]; + [fhErr readInBackgroundAndNotify]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jakeReceivedData:) name:NSFileHandleReadCompletionNotification object:fhOut]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jakeReceivedError:) name:NSFileHandleReadCompletionNotification object:fhErr]; + + [task launch]; + + DDLogVerbose(@"Task launched: %@\n%@", launchPath, arguments); + + [task waitUntilExit]; + + DDLogVerbose(@"Task exited: %@:%d", launchPath, task.terminationStatus); + + NSNumber *status = @(task.terminationStatus); + NSData *data = nil; + + if ([status intValue] == 0) + data = [[task.standardOutput fileHandleForReading] availableData]; + else + data = [[task.standardError fileHandleForReading] availableData]; + + NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + + [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:fhOut]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:fhErr]; + + return @{@"status" : status, @"response" : response}; +} + +-(void)jakeReceivedData:(NSNotification*)notification +{ + NSData *data = [notification userInfo][NSFileHandleNotificationDataItem]; + NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; + + DDLogVerbose(@"Jake receive data\n %@", string); + + [[notification object] readInBackgroundAndNotify]; +} + +-(void)jakeReceivedError:(NSNotification*)notification +{ + NSData *data = [notification userInfo][NSFileHandleNotificationDataItem]; + NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; + + DDLogVerbose(@"Jake receive error\%@", string); +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h new file mode 100644 index 000000000..bd416e4f2 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h @@ -0,0 +1,20 @@ +// +// XCCUserDefaults.h +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/6/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#ifndef XcodeCapp_XCCUserDefaults_h +#define XcodeCapp_XCCUserDefaults_h + +#import + +extern NSString * const XCCUserDefaultsAutoOpenXcodeProject; +extern NSString * const XCCUserDefaultsManagedProjects; +extern NSString * const XCCUserDefaultsLogLevel; +extern NSString * const XCCUserDefaultsSelectedProjectPath; +extern NSString * const XCCUserDefaultsMaxNumberOfConcurrentOperations; + +#endif diff --git a/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m new file mode 100644 index 000000000..9cc4470a4 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m @@ -0,0 +1,15 @@ +// +// UserDefaults.m +// XcodeCapp +// +// Created by Alexandre Wilhelm on 5/6/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#include "XCCUserDefaults.h" + +NSString * const XCCUserDefaultsAutoOpenXcodeProject = @"XCCUserDefaultsAutoOpenXcodeProject"; +NSString * const XCCUserDefaultsManagedProjects = @"XCCUserDefaultsManagedProjects"; +NSString * const XCCUserDefaultsLogLevel = @"XCCUserDefaultsLogLevel"; +NSString * const XCCUserDefaultsSelectedProjectPath = @"XCCUserDefaultsSelectedProjectPath"; +NSString * const XCCUserDefaultsMaxNumberOfConcurrentOperations = @"XCCUserDefaultsMaxNumberOfConcurrentOperations"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XCCWelcomeView.h b/Tools/XcodeCapp/XcodeCapp/XCCWelcomeView.h new file mode 100644 index 000000000..189bb493e --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCWelcomeView.h @@ -0,0 +1,24 @@ +// +// XCCProjectsFolderDropView.h +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import + +@class XCCMainController; + + +@interface XCCWelcomeView : NSBox +{ + IBOutlet NSBox *boxImport; + IBOutlet NSProgressIndicator *loadingIndicator; +} + +@property XCCMainController *mainXcodeCappController; + +- (void)showLoading:(BOOL)shouldShow; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XCCWelcomeView.m b/Tools/XcodeCapp/XcodeCapp/XCCWelcomeView.m new file mode 100644 index 000000000..0643f2bd7 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCWelcomeView.m @@ -0,0 +1,102 @@ +// +// XCCProjectsFolderDropView.m +// XcodeCapp +// +// Created by Antoine Mercadal on 6/4/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. +// + +#import "XCCWelcomeView.h" +#import "XCCMainController.h" + +@implementation XCCWelcomeView + + +#pragma mark - Initialization + +- (void)awakeFromNib +{ + [self registerForDraggedTypes:@[NSFilenamesPboardType]]; +} + + +#pragma mark - Utilities + +- (void)showLoading:(BOOL)shouldShow +{ + if (shouldShow) + { + self->boxImport.hidden = YES; + self->loadingIndicator.hidden = NO; + + [self->loadingIndicator startAnimation:self]; + } + else + { + self->boxImport.hidden = NO; + self->loadingIndicator.hidden = YES; + + [self->loadingIndicator stopAnimation:self]; + } +} + + +#pragma mark Drag and Drop + +- (NSDragOperation)draggingEntered:(id)info +{ + NSPasteboard *pboard = [info draggingPasteboard]; + + if ([pboard.types containsObject:(NSString *)NSFilenamesPboardType]) + { + NSArray *draggedFiles = [pboard propertyListForType:(NSString *)NSFilenamesPboardType]; + + for (NSString *file in draggedFiles) + { + BOOL isDir; + [[NSFileManager defaultManager] fileExistsAtPath:file isDirectory:&isDir]; + + if (!isDir) + return NSDragOperationNone; + } + + self.fillColor = [NSColor colorWithCalibratedRed:236.0/255.0 green:236.0/255.0 blue:236.0/255.0 alpha:1.0]; + return NSDragOperationCopy; + } + + return NSDragOperationNone; +} + +- (void)draggingExited:(id)info +{ + self.fillColor = [NSColor whiteColor]; +} + +- (BOOL)prepareForDragOperation:(id)info +{ + return YES; +} + +- (BOOL)performDragOperation:(id)info +{ + NSPasteboard *pboard = [info draggingPasteboard]; + + if ([pboard.types containsObject:(NSString *)NSFilenamesPboardType]) + { + NSArray *draggedFolders = [pboard propertyListForType:(NSString *)NSFilenamesPboardType]; + + for (NSString *folder in draggedFolders) + [self.mainXcodeCappController manageCappuccinoProjectControllerForPath:folder]; + + return YES; + } + + return NO; +} + +- (void)concludeDragOperation:(id)info +{ + self.fillColor = [NSColor whiteColor]; +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h deleted file mode 100644 index ef7b756c5..000000000 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ /dev/null @@ -1,177 +0,0 @@ -/* - * This file is a part of program XcodeCapp - * Copyright (C) 2011 Antoine Mercadal () - * - * 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 3 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, see . - */ - -#import -#import - -// FSEvent listening mode we use -enum XCCAPIMode { - kXCCAPIModeAuto = 0, - kXCCAPIModeFile, - kXCCAPIModeFolder -}; - -// Type of output expected from runTaskWithLaunchPath:arguments:returnType: -enum XCCTaskReturnType { - kTaskReturnTypeNone, - kTaskReturnTypeStdOut, - kTaskReturnTypeStdError, - kTaskReturnTypeAny -}; -typedef enum XCCTaskReturnType XCCTaskReturnType; - -// Status codes returned by support scripts run as tasks -enum { - XCCStatusCodeError = 1, - XCCStatusCodeWarning = 2 -}; - -// Notifications we send -extern NSString * const XCCConversionDidStartNotification; -extern NSString * const XCCConversionDidEndNotification; -extern NSString * const XCCProjectDidFinishLoadingNotification; -extern NSString * const XCCCappLintDidStartNotification; -extern NSString * const XCCCappLintDidEndNotification; - -@interface XcodeCapp : NSObject - -/* - Every time the user opens or closes a project, this is incremented. It is passed to threaded operations - which load the project. These threaded operations generate notifications that get queued up - on the main thread. Because the user may cancel and start a new load while notifications are - still queued from the previous load, we compare the projectId returned by a notification - with the current projectId. If they don't match, we let the notification drain. -*/ -@property NSInteger projectId; - -// An array of paths we add to the NSTask environment -@property NSArray *environmentPaths; - -// An array of executable names we need to have available -@property NSArray *executables; - -// Full path to .XcodeSupport -@property NSString *supportPath; - -// Full path to the Cappuccino project root directory -@property NSString *projectPath; - -// Full path to the .xcodeproj -@property NSString *xcodeProjectPath; - -// Full path to parser.j -@property NSString *parserPath; - -// Full path to pbxprojModifier.py -@property NSString *pbxModifierScriptPath; - -// Tooltip for the radio button symlink -@property NSString *toolTipSymlinkRadioButton; - -// Full paths to the executables we rely on: jsc, objj, nib2cib, python -@property NSMutableDictionary *executablePaths; - -// Whether the current OS supports file-level FSEvents (10.7+) -@property BOOL supportsFileLevelAPI; - -// Whether we are actually using file-level FSEvents -@property BOOL isUsingFileLevelAPI; - -// Whether we should process source files that have inode-only modifications -@property BOOL reactToInodeModification; - -// Whether we are in the process of loading a project -@property BOOL isLoadingProject; - -// Whether we are currently processing source files -@property BOOL isProcessing; - -// Whether we are currently processing source files -@property BOOL isCappuccinoUpdating; - -// Whether $CAPP_BUILD is defined or not -@property BOOL isCappBuildDefined; - -// A mapping from full paths to project-relative paths -@property NSMutableDictionary *projectPathsForSourcePaths; - -// A list of errors generated from the current batch of source processing -@property NSMutableArray *errorList; - -// A list of files name who can be processed, based on xcapp-ignore and path pf the project -@property NSMutableArray *xCodeCappTargetedFiles; - -// Panel, table and controller used to display errors -@property (strong) IBOutlet NSPanel *errorsPanel; -@property (unsafe_unretained) IBOutlet NSTableView *errorTable; -@property (strong) IBOutlet NSArrayController *errorListController; - -@property (strong) IBOutlet NSProgressIndicator *progressIndicator; -@property (strong) IBOutlet NSTextField *fieldCurrentTask; -@property (strong) IBOutlet NSPanel *updatingCappuccinoPanel; - -- (IBAction)openErrorsPanel:(id)sender; -- (IBAction)clearErrors:(id)sender; -- (IBAction)openErrorInEditor:(id)sender; -- (IBAction)openXcodeProject:(id)aSender; -- (IBAction)synchronizeProject:(id)aSender; -- (IBAction)checkProjectWithCappLint:(id)aSender; - -- (BOOL)executablesAreAccessible; -- (void)stop; -- (void)loadProjectAtPath:(NSString *)path; -- (BOOL)pathMatchesIgnoredPaths:(NSString*)aPath; - -- (BOOL)notificationBelongsToCurrentProject:(NSNotification *)note; - -- (BOOL)isObjjFile:(NSString *)path; -- (BOOL)isXibFile:(NSString *)path; -- (BOOL)isXCCIgnoreFile:(NSString *)path; - -- (BOOL)shouldShowErrorNotification; - -- (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path; -- (BOOL)hasErrors; - -- (void)computeIgnoredPaths; -- (BOOL)shouldIgnoreDirectoryNamed:(NSString *)filename; - -- (void)wantUserNotificationWithInfo:(NSDictionary *)info; -- (NSDictionary *)runTaskWithLaunchPath:(NSString *)launchPath arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType; - -- (NSDictionary*)createProject:(NSString*)aPath; - -- (void)showCappLintWarnings; -- (void)showObjjWarnings; - -- (BOOL)shouldProcessWithCappLint; -- (BOOL)checkCappLintForPath:(NSArray*)paths; - -- (BOOL)shouldProcessWithObjjWarnings; -- (BOOL)checkObjjWarningsForPath:(NSArray*)paths; - -- (void)updateCappuccino; - -@end - -@interface XcodeCapp (SnowLeopard) - -- (void)updateLastModificationDate:(NSDate *)date forPath:(NSString *)path; -- (NSDate *)lastModificationDateForPath:(NSString *)path; - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m deleted file mode 100644 index 3e3b13bd7..000000000 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ /dev/null @@ -1,2460 +0,0 @@ -/* - * This file is a part of program XcodeCapp - * Copyright (C) 2011 Antoine Mercadal () - * - * 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 3 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, see . - */ - -#include - -#import - -#import "XcodeCapp.h" -#import "AppController.h" -#import "FindSourceFilesOperation.h" -#import "Notifications.h" -#import "ProcessSourceOperation.h" -#import "UserDefaults.h" -#import "XcodeProjectCloser.h" - - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_6 -# define kFSEventStreamCreateFlagFileEvents 0x00000010 -# define kFSEventStreamEventFlagItemIsFile 0x00010000 -# define kFSEventStreamEventFlagItemRemoved 0x00000200 -# define kFSEventStreamEventFlagItemCreated 0x00000200 -# define kFSEventStreamEventFlagItemModified 0x00001000 -# define kFSEventStreamEventFlagItemInodeMetaMod 0x00000400 -# define kFSEventStreamEventFlagItemRenamed 0x00000800 -# define kFSEventStreamEventFlagItemFinderInfoMod 0x00002000 -# define kFSEventStreamEventFlagItemChangeOwner 0x00004000 -# define kFSEventStreamEventFlagItemXattrMod 0x00008000 -#endif - - -enum XCCLineSpecifier { - kLineSpecifierNone, - kLineSpecifierColon, - kLineSpecifierMinusL, - kLineSpecifierPlus -}; -typedef enum XCCLineSpecifier XCCLineSpecifier; - -// Where we put the generated Cocoa class files -static NSString * const XCCSupportFolderName = @".XcodeSupport"; - -// We store a compatibility version in .XcodeSupport/Info.plist. -// If the version is less than the version in XcodeCapp's Info.plist, we regenerate .XcodeSupport. -static NSString * const XCCCompatibilityVersionKey = @"XCCCompatibilityVersion"; - -// We replace "/" in a path with this. It looks like "/", -// but is actually an obscure Unicode character we hope no one uses in a filename. -static NSString * const XCCSlashReplacement = @"∕"; // DIVISION SLASH, Unicode: U+2215 - -// When scanning the project, we immediately ignore directories that match this regex. -static NSString * const XCCDirectoriesToIgnorePattern = @"^(?:Build|F(?:rameworks|oundation)|AppKit|Objective-J|(?:Browser|CommonJS)\\.environment|Resources|XcodeSupport|.+\\.xcodeproj)$"; - -// The key for an Info.plist array of the mandatory executables XCC needs. -static NSString * const XCCMandatoryExecutablesKey = @"XCCMandatoryExecutables"; - -// The regex above is used with this predicate for testing. -static NSPredicate * XCCDirectoriesToIgnorePredicate = nil; - -// An array of the default predicates used to ignore paths. -static NSArray *XCCDefaultIgnoredPathPredicates = nil; - -NSString * const XCCCappLintDidStartNotification = @"XCCCappLintDidStartNotification"; -NSString * const XCCCappLintDidEndNotification = @"XCCCappLintDidEndNotification"; -NSString * const XCCObjjDidStartNotification = @"XCCObjjDidStartNotification"; -NSString * const XCCObjjDidEndNotification = @"XCCObjjDidEndNotification"; - -@interface XcodeCapp () - -// Only used with 10.6 when we don't have file-level FSEvents -@property (nonatomic) NSMutableDictionary *pathModificationDates; - -@property FSEventStreamRef stream; - -// Whether the FSEventStream is started or stopped. -@property BOOL streamStarted; - -// The last FSEvent id we received. This is stored in the user prefs -// so we can get all changes since the last time XcodeCapp was launched. -@property NSNumber *lastEventId; - -@property NSDate *appStartedTimestamp; - -@property NSFileManager *fm; - -// An NSString version of XCCCloseXcodeProjectScript -@property NSString *closeXcodeProjectScriptSource; - -// Full path to .xcodecapp-ignore -@property NSString *xcodecappIgnorePath; - -// The current array of predicates used to ignore paths -@property NSMutableArray *ignoredPathPredicates; - -// The environment we pass to tasks launched from XcodeCapp -@property NSMutableDictionary *environment; - -// We keep a file descriptor open for the project directory -// so we can locate it if it moves. -@property int projectPathFileDescriptor; - -// Coalesces the modifications that have to be made to the Xcode project -// after changes are made to source files. Keys are the actions "add" or "remove", -// values are arrays of full paths to source files that need to be added or removed. -@property NSMutableDictionary *pbxOperations; - -// A queue for threaded operations to perform -@property NSOperationQueue *operationQueue; - -// We have to declare this because it is referenced by the fsevents_callback function -- (void)handleFSEventsWithPaths:(NSArray *)paths flags:(const FSEventStreamEventFlags[])eventFlags ids:(const FSEventStreamEventId[])eventIds; - -@end - - -void fsevents_callback(ConstFSEventStreamRef streamRef, - void *userData, - size_t numEvents, - void *eventPaths, - const FSEventStreamEventFlags eventFlags[], - const FSEventStreamEventId eventIds[]) -{ - XcodeCapp *xcc = (__bridge XcodeCapp *)userData; - NSArray *paths = (__bridge NSArray *)eventPaths; - - [xcc handleFSEventsWithPaths:paths flags:eventFlags ids:eventIds]; -} - - -@implementation XcodeCapp - -#pragma mark - Initialization - -+ (void)initialize -{ - if (self != [XcodeCapp class]) - return; - - // Initialize static values that can't be initialized in their declarations - - XCCDirectoriesToIgnorePredicate = [NSPredicate predicateWithFormat:@"SELF matches %@", XCCDirectoriesToIgnorePattern]; - - NSArray *defaultIgnoredPaths = @[ - @"*/Frameworks/", - @"!*/Frameworks/Debug/", - @"!*/Frameworks/Source/", - @"*/AppKit/", - @"*/Foundation/", - @"*/Objective-J/", - @"*/*.environment/", - @"*/Build/", - @"*/*.xcodeproj/", - @"*/.*/", - @"*/NS_*.j", - @"*/main.j", - @"*/.*", - @"!*/.xcodecapp-ignore" - ]; - - XCCDefaultIgnoredPathPredicates = [self parseIgnorePaths:defaultIgnoredPaths]; -} - -- (id)init -{ - self = [super init]; - - if (self) - { - self.errorList = [NSMutableArray arrayWithCapacity:10]; - self.fm = [NSFileManager defaultManager]; - self.ignoredPathPredicates = [NSMutableArray new]; - self.parserPath = [[NSBundle mainBundle].sharedSupportPath stringByAppendingPathComponent:@"parser.j"]; - self.appStartedTimestamp = [NSDate date]; - self.projectPathsForSourcePaths = [NSMutableDictionary new]; - self.xcodecappIgnorePath = @""; - self.operationQueue = [NSOperationQueue new]; - self.pbxOperations = [NSMutableDictionary new]; - self.executablePaths = [NSMutableDictionary new]; - self.projectPathFileDescriptor = -1; - self.isCappBuildDefined = YES; - self.toolTipSymlinkRadioButton = @"If this is checked, when a Cappuccino project is created, the frameworks of the new project will be symlinked from the $CAPP_BUILD"; - - [self initTaskEnvironment]; - - self.isUsingFileLevelAPI = NO; - self.isLoadingProject = NO; - self.isProcessing = NO; - - // File-level FSEvents are only supported on 10.7+ - SInt32 versionMajor = 0; - SInt32 versionMinor = 0; - Gestalt(gestaltSystemVersionMajor, &versionMajor); - Gestalt(gestaltSystemVersionMinor, &versionMinor); - - self.supportsFileLevelAPI = versionMajor >= 10 && versionMinor >= 7; - - // Uncomment to simulate 10.6 mode - // self.supportsFileLevelAPI = NO; - - [self configureFileAPI]; - - [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self; - [GrowlApplicationBridge setGrowlDelegate:self]; - - [self initObservers]; - } - - return self; -} - -- (void)initTaskEnvironment -{ - // Add possible executable paths to PATH - self.environment = [NSProcessInfo processInfo].environment.mutableCopy; - - self.environmentPaths = - @[ - @"/usr/local/bin", - @"/usr/local/narwhal/bin", - @"~/narwhal/bin", - @"~/bin", - @"/usr/bin" - ]; - - NSMutableArray *paths = [self.environmentPaths mutableCopy]; - - for (NSInteger i = 0; i < paths.count; ++i) - paths[i] = [paths[i] stringByExpandingTildeInPath]; - - self.environment[@"PATH"] = [[paths componentsJoinedByString:@":"] stringByAppendingFormat:@":%@", self.environment[@"PATH"]]; - - // Make sure we are using jsc as the narwhal engine! - self.environment[@"NARWHAL_ENGINE"] = @"jsc"; - - // Make sure to not do something in sudo - self.environment[@"CAPP_NOSUDO"] = @"1"; - - self.executables = @[@"python", @"narwhal-jsc", @"objj", @"nib2cib", @"capp", @"capp_lint", @"jake", @"curl", @"unzip", @"rm"]; - - // This is used to get the env var of $CAPP_BUILD - NSDictionary *processEnvironment = [[NSProcessInfo processInfo] environment]; - NSArray *arguments = [NSArray arrayWithObjects:@"-l", @"-c", @"echo $CAPP_BUILD", nil]; - - NSDictionary *taskResult = [self runTaskWithLaunchPath:[processEnvironment objectForKey:@"SHELL"] - arguments:arguments - returnType:kTaskReturnTypeStdOut]; - - // Make sure to remove the \n at the end of the response - NSString *response = [taskResult[@"response"] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; - - self.environment[@"CAPP_BUILD"] = response; - - // Make sure we have found a CAPP_BUILD - if ([response length] == 0 || [taskResult[@"status"] intValue] == -1) - { - self.toolTipSymlinkRadioButton = @"To use this option you need to have the variable $CAPP_BUILD in your environement (export CAPP_BUILD='path/to/your/cappuccino/build')"; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:@NO forKey:kDefaultUseSymlinkWhenCreatingProject]; - self.isCappBuildDefined = NO; - } -} - -- (void)initObservers -{ - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - - [center addObserver:self selector:@selector(addSourceToProjectPathMappingHandler:) name:XCCNeedSourceToProjectPathMappingNotification object:nil]; - [center addObserver:self selector:@selector(sourceConversionDidStartHandler:) name:XCCConversionDidStartNotification object:nil]; - [center addObserver:self selector:@selector(sourceConversionDidEndHandler:) name:XCCConversionDidEndNotification object:nil]; - [center addObserver:self selector:@selector(sourceConversionDidGenerateErrorHandler:) name:XCCConversionDidGenerateErrorNotification object:nil]; -} - -#pragma mark - Properties - -- (id)pathModificationDates -{ - if (!_pathModificationDates) - { - _pathModificationDates = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:kDefaultPathModificationDates] mutableCopy]; - - if (!_pathModificationDates) - _pathModificationDates = [NSMutableDictionary new]; - } - - return _pathModificationDates; -} - -- (BOOL)xcodeProjectCanBeOpened -{ - return (self.xcodeProjectPath && - !self.isProcessing && - [self.fm fileExistsAtPath:self.xcodeProjectPath]); -} - -#pragma mark - Project Management - -- (void)loadProjectAtPath:(NSString *)path -{ - DDLogInfo(@"Loading project: %@", path); - - self.isLoadingProject = YES; - ++self.projectId; - - [self notifyUserWithTitle:@"Loading project…" message:path.lastPathComponent]; - - self.projectPath = path; - self.xcodecappIgnorePath = [self.projectPath stringByAppendingPathComponent:@".xcodecapp-ignore"]; - self.projectPathsForSourcePaths = [NSMutableDictionary new]; - [self.pbxOperations removeAllObjects]; - self.lastEventId = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultLastEventId]; - - [self clearErrors:self]; - [self computeIgnoredPaths]; - - [self prepareXcodeSupport]; - [self populateXcodeProject]; - [self populatexCodeCappTargetedFiles]; - [self waitForOperationQueueToFinishWithSelector:@selector(projectDidFinishLoading)]; -} - -/*! - Create Xcode project and .XcodeSupport directory if necessary. - - @return YES if both exist -*/ -- (BOOL)prepareXcodeSupport -{ - NSString *projectName = [self.projectPath.lastPathComponent stringByAppendingString:@".xcodeproj"]; - - self.xcodeProjectPath = [self.projectPath stringByAppendingPathComponent:projectName]; - self.supportPath = [self.projectPath stringByAppendingPathComponent:XCCSupportFolderName]; - self.pbxModifierScriptPath = [[NSBundle mainBundle].sharedSupportPath stringByAppendingPathComponent:@"pbxprojModifier.py"]; - - // If either the project or the support directory are missing, recreate them both to ensure they are in sync - BOOL projectExists, projectIsDirectory; - projectExists = [self.fm fileExistsAtPath:self.xcodeProjectPath isDirectory:&projectIsDirectory]; - - BOOL supportExists, supportIsDirectory; - supportExists = [self.fm fileExistsAtPath:self.supportPath isDirectory:&supportIsDirectory]; - - if (!projectExists || !projectIsDirectory || !supportExists) - [self createXcodeProject]; - - // If the project did not exist, reset the XcodeSupport directory to force the new empty project to be populated - if (!supportExists || !supportIsDirectory || !projectExists || ![self xcodeSupportIsCompatible]) - [self createXcodeSupportDirectory]; - - return projectExists && supportExists; -} - -- (BOOL)xcodeSupportIsCompatible -{ - double appCompatibilityVersion = [[[NSBundle mainBundle] objectForInfoDictionaryKey:XCCCompatibilityVersionKey] doubleValue]; - - NSString *infoPath = [self.supportPath stringByAppendingPathComponent:@"Info.plist"]; - NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:infoPath]; - NSNumber *projectCompatibilityVersion = info[XCCCompatibilityVersionKey]; - - if (projectCompatibilityVersion == nil) - { - DDLogVerbose(@"No compatibility version in project"); - return NO; - } - - DDLogVerbose(@"XcodeCapp/project compatibility version: %0.1f/%0.1f", projectCompatibilityVersion.doubleValue, appCompatibilityVersion); - - return projectCompatibilityVersion.doubleValue >= appCompatibilityVersion; -} - -- (void)populatexCodeCappTargetedFiles -{ - NSFileManager *fm = [NSFileManager defaultManager]; - NSDirectoryEnumerator *filesOfProject = [fm enumeratorAtPath:self.projectPath]; - NSString *filename; - - self.xCodeCappTargetedFiles = [NSMutableArray array]; - - while ((filename = [filesOfProject nextObject] )) { - - NSString *fullPath = [self.projectPath stringByAppendingPathComponent:filename]; - - if (![self isSourceFile:fullPath]) - continue; - - [self.xCodeCappTargetedFiles addObject:fullPath]; - } -} - -- (void)createXcodeProject -{ - if ([self.fm fileExistsAtPath:self.xcodeProjectPath]) - [self.fm removeItemAtPath:self.xcodeProjectPath error:nil]; - - [self.fm createDirectoryAtPath:self.xcodeProjectPath withIntermediateDirectories:YES attributes:nil error:nil]; - - NSString *pbxPath = [self.xcodeProjectPath stringByAppendingPathComponent:@"project.pbxproj"]; - - [self.fm copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"project" ofType:@"pbxproj"] toPath:pbxPath error:nil]; - - NSMutableString *content = [NSMutableString stringWithContentsOfFile:pbxPath encoding:NSUTF8StringEncoding error:nil]; - - [content writeToFile:pbxPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; - - DDLogInfo(@"Xcode support project created at: %@", self.xcodeProjectPath); -} - -- (void)createXcodeSupportDirectory -{ - if ([self.fm fileExistsAtPath:self.supportPath]) - [self.fm removeItemAtPath:self.supportPath error:nil]; - - [self.fm createDirectoryAtPath:self.supportPath withIntermediateDirectories:YES attributes:nil error:nil]; - - NSNumber *appCompatibilityVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:XCCCompatibilityVersionKey]; - NSData *data = [NSPropertyListSerialization dataFromPropertyList:@{ XCCCompatibilityVersionKey:appCompatibilityVersion } - format:NSPropertyListXMLFormat_v1_0 - errorDescription:nil]; - [data writeToFile:[self.supportPath stringByAppendingPathComponent:@"Info.plist"] atomically:YES]; - - DDLogInfo(@".XcodeSupport directory created at: %@", self.supportPath); -} - -- (void)populateXcodeProject -{ - // Populate with all non-framework code - [self populateXcodeProjectWithProjectRelativePath:@""]; - - // Populate with any user source debug frameworks - [self populateXcodeProjectWithProjectRelativePath:@"Frameworks/Debug"]; - - // Populate with any source frameworks - [self populateXcodeProjectWithProjectRelativePath:@"Frameworks/Source"]; - - // Populate resources - [self populateXcodeProjectWithProjectRelativePath:@"Resources"]; -} - -- (void)populateXcodeProjectWithProjectRelativePath:(NSString *)path -{ - FindSourceFilesOperation *op = [[FindSourceFilesOperation alloc] initWithXCC:self projectId:[NSNumber numberWithInteger:self.projectId] path:path]; - [self.operationQueue addOperation:op]; -} - -- (IBAction)openXcodeProject:(id)aSender -{ - BOOL isDirectory, opened = YES; - BOOL exists = [self.fm fileExistsAtPath:self.xcodeProjectPath isDirectory:&isDirectory]; - - if (exists && isDirectory) - { - DDLogVerbose(@"Opening Xcode project at: %@", self.xcodeProjectPath); - - opened = [[NSWorkspace sharedWorkspace] openFile:self.xcodeProjectPath]; - } - - if (!exists || !isDirectory || !opened) - { - NSString *text; - - if (!opened) - text = @"The project exists, but failed to open."; - else - text = [NSString stringWithFormat:@"%@ %@.", self.xcodeProjectPath, !exists ? @"does not exist" : @"is not an Xcode project"]; - - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - NSInteger response = NSRunAlertPanel(@"The project could not be opened.", @"%@\n\nWould you like to regenerate the project?", @"Yes", @"No", nil, text); - - if (response == NSAlertDefaultReturn) - [self synchronizeProject:self]; - } -} - -- (void)resetProject -{ - NSString *projectPath = self.projectPath; - - [self stop]; - [self removeSupportFilesAtPath:projectPath]; - [self removeAllCibsAtPath:[projectPath stringByAppendingPathComponent:@"Resources"]]; - - self.projectPath = projectPath; -} - -- (IBAction)synchronizeProject:(id)aSender -{ - [self resetProject]; - [self loadProjectAtPath:self.projectPath]; -} - -- (void)removeAllCibsAtPath:(NSString *)path -{ - NSArray *paths = [self.fm contentsOfDirectoryAtPath:path error:nil]; - - for (NSString *filePath in paths) - { - if ([filePath.pathExtension.lowercaseString isEqualToString:@"cib"]) - [self.fm removeItemAtPath:[path stringByAppendingPathComponent:filePath] error:nil]; - } -} - -- (void)removeSupportFilesAtPath:(NSString *)projectPath -{ - [XcodeProjectCloser closeXcodeProjectForProject:projectPath]; - - [self.fm removeItemAtPath:self.xcodeProjectPath error:nil]; - [self.fm removeItemAtPath:self.supportPath error:nil]; -} - -- (void)stop -{ - // Increment the projectId to ensure remaining notifications in the queue for the current project are ignored - ++self.projectId; - - self.isLoadingProject = NO; - [self stopEventStream]; - [self.operationQueue cancelAllOperations]; - - self.projectPath = nil; - [self clearErrors:self]; - [self.ignoredPathPredicates removeAllObjects]; - - [[NSUserDefaults standardUserDefaults] synchronize]; -} - -#pragma mark - Processing - -- (void)waitForOperationQueueToFinishWithSelector:(SEL)selector -{ - self.isProcessing = YES; - - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; - - // Poll every half second to see if the queue has finished - [NSTimer scheduledTimerWithTimeInterval:0.5 - target:self - selector:@selector(didQueueTimerFinish:) - userInfo:NSStringFromSelector(selector) - repeats:YES]; -} - -- (void)didQueueTimerFinish:(NSTimer *)timer -{ - if (self.operationQueue.operationCount == 0) - { - SEL selector = NSSelectorFromString(timer.userInfo); - - [timer invalidate]; - - // Can't use plain performSelect: here because ARC doesn't know what the return value is - // because the selector is determined at runtime. So we use performSelectorOnMainThread: - // which has no return value. - [self performSelectorOnMainThread:selector withObject:nil waitUntilDone:NO]; - } -} - -- (void)batchDidFinish -{ - if (self.pbxOperations.count) - { - // See pbxprojModifier.py for info on the arguments - NSMutableArray *arguments = [[NSMutableArray alloc] initWithObjects:self.pbxModifierScriptPath, @"update", self.projectPath, nil]; - - for (NSString *action in self.pbxOperations) - { - NSArray *paths = self.pbxOperations[action]; - - if (paths.count) - { - [arguments addObject:action]; - [arguments addObjectsFromArray:paths]; - } - } - - // This task takes less than a second to execute, no need to put it a separate thread - - NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"python"] - arguments:arguments - returnType:kTaskReturnTypeStdError]; - - NSInteger status = [taskResult[@"status"] intValue]; - NSString *response = taskResult[@"response"]; - - DDLogVerbose(@"Updated Xcode project: [%ld, %@]", status, status ? response : @""); - } - - [self showErrors]; - - // If the event stream was temporarily stopped, restart it - [self startFSEventStream]; - - self.isProcessing = NO; - - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; -} - -- (void)projectDidFinishLoading -{ - [self batchDidFinish]; - - DDLogVerbose(@"Project finished loading"); - - self.isLoadingProject = NO; - - [[NSNotificationCenter defaultCenter] postNotificationName:XCCProjectDidFinishLoadingNotification object:self]; - [[NSUserDefaults standardUserDefaults] setObject:self.projectPath forKey:kDefaultLastOpenedPath]; - - [self notifyUserWithTitle:@"Project loaded" message:self.projectPath.lastPathComponent]; - - [self startEventStream]; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultAutoOpenXcodeProject]) - [self openXcodeProject:self]; -} - -- (NSDictionary*)createProject:(NSString*)aPath -{ - NSDictionary *taskResult; - NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"gen", aPath ,@"-t", @"NibApplication", nil]; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - // This is used when an user wants to replace an existing project - NSArray *argumentsRemove = [NSArray arrayWithObjects:@"-rf", aPath, nil]; - [self runTaskWithLaunchPath:@"/bin/rm" arguments:argumentsRemove returnType:kTaskReturnTypeAny]; - - if ([defaults boolForKey:kDefaultUseSymlinkWhenCreatingProject]) - [arguments addObject:@"-l"]; - - taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp"] - arguments:arguments - returnType:kTaskReturnTypeStdOut]; - - NSInteger status = [taskResult[@"status"] intValue]; - NSString *response = taskResult[@"response"]; - - if (!status) - { - DDLogVerbose(@"Created Xcode project: [%ld, %@]", status, status ? response : @""); - [self notifyUserWithTitle:@"Project created" message:aPath.lastPathComponent]; - } - else - { - DDLogVerbose(@"Created Xcode project failed: [%ld, %@]", status, status ? response : @""); - NSDictionary *dictionary = [NSDictionary dictionaryWithObject:response forKey:@"message"]; - [self.errorListController addObject:dictionary]; - [self showErrors]; - } - - return taskResult; -} - -#pragma mark - Notification handlers - -/* - NOTE: All methods in this section which end with "Handler" are called - from threaded NSOperations. -*/ - -/* - Notifications sent by operations contain an int projectId. - The notifications are queued up on the main thread. When the main thread - handles them, it first checks to see if the current projectId - matches the notification's projectId. If not, the notification is ignored. -*/ -- (BOOL)notificationBelongsToCurrentProject:(NSNotification *)note -{ - return [note.userInfo[@"projectId"] intValue] == self.projectId; -} - -- (void)addSourceToProjectPathMappingHandler:(NSNotification *)note -{ - [self performSelectorOnMainThread:@selector(addSourceToProjectPathMapping:) withObject:note waitUntilDone:NO]; -} - -- (void)addSourceToProjectPathMapping:(NSNotification *)note -{ - if (![self notificationBelongsToCurrentProject:note]) - return; - - NSDictionary *info = note.userInfo; - NSString *sourcePath = info[@"sourcePath"]; - - DDLogVerbose(@"Adding source to project mapping: %@ -> %@", sourcePath, info[@"projectPath"]); - - self.projectPathsForSourcePaths[info[@"sourcePath"]] = info[@"projectPath"]; -} - -- (void)sourceConversionDidStartHandler:(NSNotification *)note -{ - [self performSelectorOnMainThread:@selector(sourceConversionDidStart:) withObject:note waitUntilDone:NO]; -} - -- (void)sourceConversionDidStart:(NSNotification *)note -{ - if (![self notificationBelongsToCurrentProject:note]) - return; - - NSDictionary *info = note.userInfo; - NSString *projectPath = info[@"path"]; - - DDLogVerbose(@"%@ %@", NSStringFromSelector(_cmd), projectPath); - - [self pruneProcessingErrorsForProjectPath:projectPath]; -} - -- (void)sourceConversionDidGenerateErrorHandler:(NSNotification *)note -{ - [self performSelectorOnMainThread:@selector(sourceConversionDidGenerateError:) withObject:note waitUntilDone:NO]; -} - -- (void)sourceConversionDidGenerateError:(NSNotification *)note -{ - if (![self notificationBelongsToCurrentProject:note]) - return; - - NSMutableDictionary *info = [note.userInfo mutableCopy]; - - DDLogVerbose(@"%@ %@", NSStringFromSelector(_cmd), info[@"path"]); - - [self.errorListController addObject:info]; -} - -- (void)sourceConversionDidEndHandler:(NSNotification *)note -{ - [self performSelectorOnMainThread:@selector(sourceConversionDidEnd:) withObject:note waitUntilDone:NO]; -} - -- (void)sourceConversionDidEnd:(NSNotification *)note -{ - if (![self notificationBelongsToCurrentProject:note]) - return; - - NSString *path = note.userInfo[@"path"]; - - if ([self isObjjFile:path]) - { - NSMutableArray *addPaths = [self.pbxOperations[@"add"] mutableCopy]; - - if (!addPaths) - self.pbxOperations[@"add"] = @[path]; - else - { - [addPaths addObject:path]; - self.pbxOperations[@"add"] = addPaths; - } - } - - DDLogVerbose(@"%@ %@", NSStringFromSelector(_cmd), path); -} - -#pragma mark - Event Stream - -- (void)startEventStream -{ - if (self.stream) - return; - - [self stopEventStream]; - - FSEventStreamCreateFlags flags = kFSEventStreamCreateFlagUseCFTypes | - kFSEventStreamCreateFlagWatchRoot | - kFSEventStreamCreateFlagIgnoreSelf | - kFSEventStreamCreateFlagNoDefer; - - if (self.supportsFileLevelAPI) - flags |= kFSEventStreamCreateFlagFileEvents; - - // Get a file descriptor to the project directory so we can locate it if it moves - self.projectPathFileDescriptor = open(self.projectPath.UTF8String, O_EVTONLY); - - NSArray *pathsToWatch = [self getPathsToWatch]; - - void *appPointer = (__bridge void *)self; - FSEventStreamContext context = { 0, appPointer, NULL, NULL, NULL }; - CFTimeInterval latency = 2.0; - UInt64 lastEventId = self.lastEventId.unsignedLongLongValue; - - self.stream = FSEventStreamCreate(NULL, - &fsevents_callback, - &context, - (__bridge CFArrayRef) pathsToWatch, - lastEventId, - latency, - flags); - - FSEventStreamScheduleWithRunLoop(self.stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - [self startFSEventStream]; - - DDLogVerbose(@"FSEventStream started for paths: %@", pathsToWatch); -} - -- (void)startFSEventStream -{ - if (self.stream && !self.streamStarted) - { - FSEventStreamStart(self.stream); - self.streamStarted = YES; - } -} - -- (NSArray *)getPathsToWatch -{ - NSMutableArray *pathsToWatch = [NSMutableArray arrayWithObject:self.projectPath]; - NSArray *otherPathsToWatch = @[@"", @"Frameworks/Debug", @"Frameworks/Source"]; - - for (NSString *path in otherPathsToWatch) - { - NSString *fullPath = [self.projectPath stringByAppendingPathComponent:path]; - - BOOL exists, isDirectory; - exists = [self.fm fileExistsAtPath:fullPath isDirectory:&isDirectory]; - - if (exists && isDirectory) - [self watchSymlinkedDirectoriesAtPath:path pathsToWatch:pathsToWatch]; - } - - return [pathsToWatch copy]; -} - -- (void)watchSymlinkedDirectoriesAtPath:(NSString *)projectPath pathsToWatch:(NSMutableArray *)pathsToWatch -{ - NSString *fullProjectPath = [self.projectPath stringByAppendingPathComponent:projectPath]; - NSError *error = NULL; - - NSArray *urls = [self.fm contentsOfDirectoryAtURL:[NSURL fileURLWithPath:fullProjectPath] - includingPropertiesForKeys:@[NSURLIsDirectoryKey, NSURLIsSymbolicLinkKey] - options:NSDirectoryEnumerationSkipsHiddenFiles | NSDirectoryEnumerationSkipsPackageDescendants | NSDirectoryEnumerationSkipsSubdirectoryDescendants - error:&error]; - - for (NSURL *url in urls) - { - NSNumber *isSymlink; - [url getResourceValue:&isSymlink forKey:NSURLIsSymbolicLinkKey error:nil]; - - if (isSymlink.boolValue == NO) - continue; - - NSURL *resolvedURL = [url URLByResolvingSymlinksInPath]; - - if (![resolvedURL checkResourceIsReachableAndReturnError:nil]) - continue; - - NSNumber *isDirectory; - [resolvedURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil]; - - if (isDirectory.boolValue == NO) - continue; - - NSString *path = resolvedURL.path; - NSString *filename = path.lastPathComponent; - - if (![self shouldIgnoreDirectoryNamed:filename] && ![self pathMatchesIgnoredPaths:path]) - { - DDLogVerbose(@"Watching symlinked directory: %@", path); - - [pathsToWatch addObject:path]; - } - } -} - -- (void)stopEventStream -{ - if (self.stream) - { - [self updateUserDefaultsWithLastEventId]; - - [self stopFSEventStream]; - FSEventStreamUnscheduleFromRunLoop(self.stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - FSEventStreamInvalidate(self.stream); - FSEventStreamRelease(self.stream); - self.stream = NULL; - } - - if (self.projectPathFileDescriptor >= 0) - { - close(self.projectPathFileDescriptor); - self.projectPathFileDescriptor = -1; - } -} - -- (void)stopFSEventStream -{ - if (self.stream && self.streamStarted) - { - FSEventStreamStop(self.stream); - self.streamStarted = NO; - } -} - -- (void)configureFileAPI -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - if (!self.supportsFileLevelAPI) - { - DDLogInfo(@"System doesn't support file level API, user folder level API"); - - [defaults setObject:[NSNumber numberWithInt:kXCCAPIModeFolder] forKey:kDefaultXCCAPIMode]; - } - - switch ([defaults integerForKey:kDefaultXCCAPIMode]) - { - case kXCCAPIModeAuto: - self.isUsingFileLevelAPI = self.supportsFileLevelAPI; - break; - - case kXCCAPIModeFolder: - self.isUsingFileLevelAPI = NO; - break; - } - - self.reactToInodeModification = self.isUsingFileLevelAPI ? [defaults boolForKey:kDefaultXCCReactToInodeMod] : NO; -} - -- (void)updateUserDefaultsWithLastEventId -{ - UInt64 lastEventId = FSEventStreamGetLatestEventId(self.stream); - - // Just in case the stream callback was never called... - if (lastEventId != 0) - self.lastEventId = [NSNumber numberWithUnsignedLongLong:lastEventId]; - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:self.lastEventId forKey:kDefaultLastEventId]; - [defaults synchronize]; -} - -- (NSString *)dumpFSEventFlags:(FSEventStreamEventFlags)flags -{ - BOOL created = (flags & kFSEventStreamEventFlagItemCreated) != 0; - BOOL removed = (flags & kFSEventStreamEventFlagItemRemoved) != 0; - BOOL inodeMetaModified = (flags & kFSEventStreamEventFlagItemInodeMetaMod) != 0; - BOOL renamed = (flags & kFSEventStreamEventFlagItemRenamed) != 0; - BOOL modified = (flags & kFSEventStreamEventFlagItemModified) != 0; - BOOL finderInfoModified = (flags & kFSEventStreamEventFlagItemFinderInfoMod) != 0; - BOOL changedOwner = (flags & kFSEventStreamEventFlagItemChangeOwner) != 0; - BOOL xattrModified = (flags & kFSEventStreamEventFlagItemXattrMod) != 0; - BOOL isFile = (flags & kFSEventStreamEventFlagItemIsFile) != 0; - BOOL isDir = (flags & kFSEventStreamEventFlagItemIsDir) != 0; - BOOL isSymlink = (flags & kFSEventStreamEventFlagItemIsSymlink) != 0; - - NSMutableArray *flagNames = [NSMutableArray new]; - - if (created) - [flagNames addObject:@"created"]; - - if (removed) - [flagNames addObject:@"removed"]; - - if (inodeMetaModified) - [flagNames addObject:@"inode"]; - - if (renamed) - [flagNames addObject:@"renamed"]; - - if (modified) - [flagNames addObject:@"modified"]; - - if (finderInfoModified) - [flagNames addObject:@"Finder info"]; - - if (changedOwner) - [flagNames addObject:@"owner"]; - - if (xattrModified) - [flagNames addObject:@"xattr"]; - - if (isFile) - [flagNames addObject:@"file"]; - - if (isDir) - [flagNames addObject:@"dir"]; - - if (isSymlink) - [flagNames addObject:@"symlink"]; - - return [flagNames componentsJoinedByString:@", "]; -} - -#pragma mark - Event Handlers - -- (void)handleFSEventsWithPaths:(NSArray *)paths flags:(const FSEventStreamEventFlags[])eventFlags ids:(const FSEventStreamEventId[])eventIds -{ - DDLogVerbose(@"FSEvents: %ld path(s)", paths.count); - - [self.pbxOperations removeAllObjects]; - - NSMutableArray *modifiedPaths = [NSMutableArray new]; - NSMutableArray *renamedDirectories = [NSMutableArray new]; - - BOOL needUpdate = NO; - - for (size_t i = 0; i < paths.count; ++i) - { - FSEventStreamEventFlags flags = eventFlags[i]; - NSString *path = [paths[i] stringByStandardizingPath]; - - BOOL rootChanged = (flags & kFSEventStreamEventFlagRootChanged) != 0; - - if (rootChanged) - { - DDLogVerbose(@"Watched path changed: %@", path); - - [self resetProjectForWatchedPath:path]; - return; - } - - BOOL isHistoryDoneSentinalEvent = (flags & kFSEventStreamEventFlagHistoryDone) != 0; - - if (isHistoryDoneSentinalEvent) - { - DDLogVerbose(@"History done sentinal event"); - continue; - } - - BOOL isMountEvent = (flags & kFSEventStreamEventFlagMount) || (flags & kFSEventStreamEventFlagUnmount); - - if (isMountEvent) - { - DDLogVerbose(@"Volume %@: %@", (flags & kFSEventStreamEventFlagMount) ? @"mounted" : @"unmounted", path); - continue; - } - - BOOL needRescan = (flags & kFSEventStreamEventFlagMustScanSubDirs) != 0; - - if (needRescan) - { - // A rescan requires a reset - [self resetProjectForWatchedPath:path]; - - return; - } - - if (self.isUsingFileLevelAPI) - { - // BOOL finderInfoModified = (flags & kFSEventStreamEventFlagItemFinderInfoMod) != 0; - // BOOL changedOwner = (flags & kFSEventStreamEventFlagItemChangeOwner) != 0; - // BOOL xattrModified = (flags & kFSEventStreamEventFlagItemXattrMod) != 0; - // BOOL isSymlink = (flags & kFSEventStreamEventFlagItemIsSymlink) != 0; - BOOL inodeMetaModified = (flags & kFSEventStreamEventFlagItemInodeMetaMod) != 0; - BOOL isFile = (flags & kFSEventStreamEventFlagItemIsFile) != 0; - BOOL isDir = (flags & kFSEventStreamEventFlagItemIsDir) != 0; - BOOL renamed = (flags & kFSEventStreamEventFlagItemRenamed) != 0; - BOOL modified = (flags & kFSEventStreamEventFlagItemModified) != 0; - BOOL created = (flags & kFSEventStreamEventFlagItemCreated) != 0; - BOOL removed = (flags & kFSEventStreamEventFlagItemRemoved) != 0; - - DDLogVerbose(@"FSEvent: %@ (%@)", path, [self dumpFSEventFlags:flags]); - - if (isDir) - { - /* - When a project is opened for the first time after it is created, - we get an event where the first path is a create for the root directory. - In that case all of the paths have been processed, and we ignore the event. - */ - if (created && [path isEqualToString:self.projectPath.stringByResolvingSymlinksInPath]) - return; - - if (renamed && - !(created || removed) && - ![self shouldIgnoreDirectoryNamed:path.lastPathComponent] && - ![self pathMatchesIgnoredPaths:path]) - { - DDLogVerbose(@"Renamed directory: %@", path); - - [renamedDirectories addObject:path]; - } - - continue; - } - else if (isFile && - (created || modified || renamed || removed || (self.reactToInodeModification && inodeMetaModified)) && - [self isSourceFile:path]) - { - DDLogVerbose(@"FSEvent accepted"); - - if ([self.fm fileExistsAtPath:path]) - [modifiedPaths addObject:path]; - else if ([path.pathExtension isEqualToString:@"xib"]) - { - // If a xib is deleted, delete its cib. There is no need to update when a xib is deleted, - // it is inside a folder in Xcode, which updates automatically. - - if (![self.fm fileExistsAtPath:path]) - { - NSString *cibPath = [path.stringByDeletingPathExtension stringByAppendingPathExtension:@"cib"]; - - if ([self.fm fileExistsAtPath:cibPath]) - [self.fm removeItemAtPath:cibPath error:nil]; - - continue; - } - } - - needUpdate = YES; - } - else if (isFile && (renamed || removed) && !(modified || created) && [path.pathExtension isEqualToString:@"cib"]) - { - // If a cib is deleted, mark its xib as needing update so the cib is regenerated - NSString *xibPath = [path.stringByDeletingPathExtension stringByAppendingPathExtension:@"xib"]; - - if ([self.fm fileExistsAtPath:xibPath]) - { - [modifiedPaths addObject:xibPath]; - needUpdate = YES; - } - } - } - else // directory-based listening - { - // We should drop support for Snow Leopard soon. - - BOOL isDirectory = NO; - [self.fm fileExistsAtPath:path isDirectory:&isDirectory]; - - // If for some reason the path is not a directory, - // we don't want to deal with it in this mode. - if (!isDirectory) - continue; - - NSFileManager *fm = [NSFileManager defaultManager]; - NSArray *subpaths = [fm contentsOfDirectoryAtPath:path error:NULL]; - - for (NSString *subpath in subpaths) - { - NSString *fullPath = [path stringByAppendingPathComponent:subpath]; - - if (![self isSourceFile:fullPath]) - continue; - - NSDate *lastModifiedDate = [self lastModificationDateForPath:fullPath]; - NSDictionary *fileAttributes = [fm attributesOfItemAtPath:fullPath error:nil]; - NSDate *fileModDate = [fileAttributes objectForKey:NSFileModificationDate]; - - if ([fileModDate compare:lastModifiedDate] == NSOrderedDescending) - { - [self updateLastModificationDate:fileModDate forPath:fullPath]; - [modifiedPaths addObject:fullPath]; - needUpdate = YES; - } - } - } - } - - // If directories were renamed, we take the easy way out and reset the project - if (renamedDirectories.count) - [self handleRenamedDirectories:renamedDirectories]; - else if (needUpdate) - [self updateSupportFilesWithModifiedPaths:modifiedPaths]; -} - -- (void)handleRenamedDirectories:(NSArray *)directories -{ - // Make sure we don't get any more events while handling these events - [self stopFSEventStream]; - - DDLogVerbose(@"Renamed directories: %@", directories); - - [self tidyShadowedFiles]; - - for (NSString *directory in directories) - { - // If it doesn't exist, it's the old name. Nothing to do. - // If it does exist, populate the project with the directory. - - if ([self.fm fileExistsAtPath:directory]) - { - // If the directory is within the project, we can populate it directly. - // Otherwise we have to start at the top level and repopulate everything. - if ([directory hasPrefix:self.projectPath]) - [self populateXcodeProjectWithProjectRelativePath:[self projectRelativePathForPath:directory]]; - else - { - [self populateXcodeProject]; - - // Since everything has been repopulated, no point in continuing - break; - } - } - } - - [self waitForOperationQueueToFinishWithSelector:@selector(batchDidFinish)]; -} - -- (void)updateSupportFilesWithModifiedPaths:(NSArray *)modifiedPaths -{ - // Make sure we don't get any more events while handling these events - [self stopFSEventStream]; - - NSArray *removedFiles = [self tidyShadowedFiles]; - - if (removedFiles.count || modifiedPaths.count) - { - for (NSString *path in modifiedPaths) - [self handleFileModificationAtPath:path]; - - [self waitForOperationQueueToFinishWithSelector:@selector(batchDidFinish)]; - } -} - -- (void)resetProjectForWatchedPath:(NSString *)path -{ - // If a watched path changes we don't have much choice but to reset the project. - [self stopFSEventStream]; - - if ([path isEqualToString:self.projectPath]) - { - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - NSInteger response = NSRunAlertPanel(@"The project moved.", @"Your project directory has moved. Would you like to reload the project or quit XcodeCapp?", @"Reload", @"Quit", nil); - - BOOL shouldQuit = YES; - - if (response == NSAlertDefaultReturn) - { - char newPathBuf[MAXPATHLEN + 1]; - - int result = fcntl(self.projectPathFileDescriptor, F_GETPATH, newPathBuf); - - if (result == 0) - { - self.projectPath = [NSString stringWithUTF8String:newPathBuf]; - shouldQuit = NO; - } - else - NSRunAlertPanel(@"The project can’t be located.", @"I’m sorry Dave, but I don’t know where the project went. I’m afraid I have to quit now.", @"OK, HAL", nil, nil); - } - - if (shouldQuit) - { - [[NSApplication sharedApplication] terminate:self]; - return; - } - } - - [self synchronizeProject:self]; -} - -/*! - Handle a file modification. If it's a .j or xib/nib, - perform the appropriate conversion. If it's .xcodecapp-ignore, it will - update the list of ignored files. - - @param path The full resolved path of the modified file -*/ -- (void)handleFileModificationAtPath:(NSString*)resolvedPath -{ - if (![self.fm fileExistsAtPath:resolvedPath]) - return; - - NSString *projectPath = [self projectPathForSourcePath:resolvedPath]; - - ProcessSourceOperation *op = [[ProcessSourceOperation alloc] initWithXCC:self - projectId:[NSNumber numberWithInteger:self.projectId] - sourcePath:projectPath]; - [self.operationQueue addOperation:op]; -} - -#pragma mark - Shell Helpers - -/*! - Run an NSTask with the given arguments - - @param launchPath The executable to launch - @param arguments NSArray containing the NSTask arguments - @param returnType Determines whether to return stdout, stderr, either, or nothing in the response - @return NSDictionary containing the return status (NSNumber) and the response (NSString) - */ -- (NSDictionary *)runTaskWithLaunchPath:(NSString *)launchPath arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType -{ - return [self runTaskWithLaunchPath:launchPath arguments:arguments returnType:returnType currentDirectoryPath:nil]; -} - -/*! - Run an NSTask with the given arguments - - @param launchPath The executable to launch - @param arguments NSArray containing the NSTask arguments - @param returnType Determines whether to return stdout, stderr, either, or nothing in the response - @param the currentDirectoryPath for the task - @return NSDictionary containing the return status (NSNumber) and the response (NSString) - */ -- (NSDictionary *)runTaskWithLaunchPath:(NSString *)launchPath arguments:(NSArray *)arguments returnType:(XCCTaskReturnType)returnType currentDirectoryPath:(NSString*)aCurrentDirectoryPath -{ - NSTask *task = [NSTask new]; - - task.launchPath = launchPath; - task.arguments = arguments; - task.environment = self.environment; - task.standardOutput = [NSPipe pipe]; - task.standardError = [NSPipe pipe]; - - if (aCurrentDirectoryPath) - task.currentDirectoryPath = aCurrentDirectoryPath; - - [task launch]; - - DDLogVerbose(@"Task launched: %@\n%@", launchPath, arguments); - - if (returnType != kTaskReturnTypeNone) - { - [task waitUntilExit]; - - DDLogVerbose(@"Task exited: %@:%d", launchPath, task.terminationStatus); - - NSData *data = nil; - - if (returnType == kTaskReturnTypeStdOut || returnType == kTaskReturnTypeAny) - data = [[task.standardOutput fileHandleForReading] availableData]; - - if (returnType == kTaskReturnTypeStdError || (returnType == kTaskReturnTypeAny && [data length] == 0)) - data = [[task.standardError fileHandleForReading] availableData]; - - NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - NSNumber *status = [NSNumber numberWithInt:task.terminationStatus]; - - return @{ @"status":status, @"response":response }; - } - else - { - return @{ @"status":@0, @"response":@"" }; - } -} - -- (BOOL)executablesAreAccessible -{ - for (NSString *executable in self.executables) - { - NSDictionary *response = [self runTaskWithLaunchPath:@"/usr/bin/which" - arguments:@[executable] - returnType:kTaskReturnTypeStdOut]; - - NSString *path = [response[@"response"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - if (path.length) - self.executablePaths[executable] = path; - else - { - DDLogError(@"Could not find executable '%@' in PATH: %@", executable, self.environment[@"PATH"]); - return NO; - } - } - - DDLogVerbose(@"Executable paths: %@", self.executablePaths); - - return YES; -} - - -#pragma mark - Source Files Management - -- (BOOL)isObjjFile:(NSString *)path -{ - return [path.pathExtension.lowercaseString isEqual:@"j"]; -} - -- (BOOL)isXibFile:(NSString *)path -{ - NSString *extension = path.pathExtension.lowercaseString; - - if ([extension isEqual:@"xib"] || [extension isEqual:@"nib"]) - { - // Xcode creates temp files called ~.xib. Filter those out. - NSString *baseFilename = path.lastPathComponent.stringByDeletingPathExtension; - - return [baseFilename characterAtIndex:baseFilename.length - 1] != '~'; - } - - return NO; -} - -- (BOOL)isXCCIgnoreFile:(NSString *)path -{ - return [path isEqualToString:self.xcodecappIgnorePath]; -} - -- (BOOL)isSourceFile:(NSString *)path -{ - return ([self isXibFile:path] || [self isObjjFile:path] || [self isXCCIgnoreFile:path]) && ![self pathMatchesIgnoredPaths:path]; -} - -- (NSString *)projectPathForSourcePath:(NSString *)path -{ - NSString *base = path.stringByDeletingLastPathComponent; - NSString *projectPath = self.projectPathsForSourcePaths[base]; - - return projectPath ? [projectPath stringByAppendingPathComponent:path.lastPathComponent] : path; -} - -- (NSString *)projectRelativePathForPath:(NSString *)path -{ - return [path substringFromIndex:self.projectPath.length + 1]; -} - - -#pragma mark - Shadow Files Management - -- (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path -{ - if (path.isAbsolutePath) - path = [self projectRelativePathForPath:path]; - - NSString *filename = [path.stringByDeletingPathExtension stringByReplacingOccurrencesOfString:@"/" withString:XCCSlashReplacement]; - - return [self.supportPath stringByAppendingPathComponent:filename]; -} - -- (NSString *)sourcePathForShadowPath:(NSString *)path -{ - NSString *filename = [path stringByReplacingOccurrencesOfString:XCCSlashReplacement withString:@"/"]; - filename = [filename.stringByDeletingPathExtension stringByAppendingPathExtension:@"j"]; - - return [self.projectPath stringByAppendingPathComponent:filename]; -} - -/*! - Clean up any shadow files and PBX entries related to given the Cappuccino source file path -*/ -- (void)removeReferencesToSourcePaths:(NSArray *)sourcePaths -{ - BOOL updateLastModDate = !self.supportsFileLevelAPI && [self respondsToSelector:@selector(updateLastModificationDate:forPath:)]; - - for (NSString *sourcePath in sourcePaths) - { - if (updateLastModDate) - [self updateLastModificationDate:nil forPath:sourcePath]; - - NSString *shadowBasePath = [self shadowBasePathForProjectSourcePath:sourcePath]; - NSString *shadowHeaderPath = [shadowBasePath stringByAppendingPathExtension:@"h"]; - NSString *shadowImplementationPath = [shadowBasePath stringByAppendingPathExtension:@"m"]; - - [self.fm removeItemAtPath:shadowHeaderPath error:nil]; - [self.fm removeItemAtPath:shadowImplementationPath error:nil]; - - [self pruneProcessingErrorsForProjectPath:sourcePath]; - } - - if (sourcePaths.count) - DDLogVerbose(@"Removed shadow references to: %@", sourcePaths); -} - -- (NSArray *)tidyShadowedFiles -{ - NSArray *subpaths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.supportPath error:nil]; - NSMutableArray *pathsToRemove = [NSMutableArray new]; - - for (NSString *path in subpaths) - { - NSString *extension = path.pathExtension; - - if ([extension isEqualToString:@"h"] && ![path.lastPathComponent isEqualToString:@"xcc_general_include.h"]) - { - NSString *sourcePath = [self sourcePathForShadowPath:path]; - - if (![self.fm fileExistsAtPath:sourcePath]) - [pathsToRemove addObject:sourcePath]; - } - } - - [self removeReferencesToSourcePaths:pathsToRemove]; - - if (pathsToRemove.count) - self.pbxOperations[@"remove"] = pathsToRemove; - - return pathsToRemove; -} - -#pragma mark - XCC Ignore management - -+ (NSString *)globToRegexPattern:(NSString *)glob -{ - NSMutableString *regex = [glob mutableCopy]; - - if ([regex characterAtIndex:0] == '!') - [regex deleteCharactersInRange:NSMakeRange(0, 1)]; - - [regex replaceOccurrencesOfString:@"." - withString:@"\\." - options:0 - range:NSMakeRange(0, [regex length])]; - - [regex replaceOccurrencesOfString:@"*" - withString:@".*" - options:0 - range:NSMakeRange(0, [regex length])]; - - // If the glob ends with "/", match that directory and anything below it. - if ([regex characterAtIndex:regex.length - 1] == '/') - [regex replaceCharactersInRange:NSMakeRange(regex.length - 1, 1) withString:@"(?:/.*)?"]; - - return [NSString stringWithFormat:@"^%@$", regex]; -} - -+ (NSArray *)parseIgnorePaths:(NSArray *)paths -{ - NSMutableArray *parsedPaths = [NSMutableArray array]; - NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet]; - - for (NSString *pattern in paths) - { - if ([pattern stringByTrimmingCharactersInSet:whitespace].length == 0) - continue; - - NSString *regexPattern = [self globToRegexPattern:pattern]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", regexPattern]; - [parsedPaths addObject:@{ @"predicate": predicate, @"exclude": @([pattern characterAtIndex:0] != '!') }]; - } - - return parsedPaths; -} - -/*! - Compute the ignored paths according to any existing .xcodecapp-ignore file -*/ -- (void)computeIgnoredPaths -{ - self.ignoredPathPredicates = [XCCDefaultIgnoredPathPredicates mutableCopy]; - NSString *ignorePath = [self.projectPath stringByAppendingPathComponent:@".xcodecapp-ignore"]; - - if ([self.fm fileExistsAtPath:ignorePath]) - { - NSString *ignoreFileContent = [NSString stringWithContentsOfFile:ignorePath encoding:NSUTF8StringEncoding error:nil]; - NSArray *ignoredPatterns = [ignoreFileContent componentsSeparatedByString:@"\n"]; - NSArray *parsedPaths = [[self class] parseIgnorePaths:ignoredPatterns]; - [self.ignoredPathPredicates addObjectsFromArray:parsedPaths]; - } - - DDLogVerbose(@"Ignoring file paths: %@", self.ignoredPathPredicates); -} - -- (BOOL)pathMatchesIgnoredPaths:(NSString*)aPath -{ - BOOL ignore = NO; - - for (NSDictionary *ignoreInfo in self.ignoredPathPredicates) - { - BOOL matches = [ignoreInfo[@"predicate"] evaluateWithObject:aPath]; - - if (matches) - ignore = [ignoreInfo[@"exclude"] boolValue]; - } - - return ignore; -} - -- (BOOL)shouldIgnoreDirectoryNamed:(NSString *)filename -{ - return [XCCDirectoriesToIgnorePredicate evaluateWithObject:filename]; -} - -#pragma mark - Errors - -- (IBAction)openErrorsPanel:(id)aSender -{ - [self.errorsPanel setFloatingPanel:[[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelStyleUtility]]; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelActiveAppWhenOpening]) - { - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - [self.errorsPanel makeKeyAndOrderFront:nil]; - } - else - { - [self.errorsPanel orderFrontRegardless]; - } -} - -- (IBAction)openErrorInEditor:(id)sender -{ - id info = self.errorListController.selection; - - NSString *path = [info valueForKey:@"realPath"] ? [info valueForKey:@"realPath"] : [info valueForKey:@"path"]; - - if (path == NSNoSelectionMarker) - return; - - if ([self isObjjFile:path]) - { - [self openObjjFile:path line:[[info valueForKey:@"line"] intValue]]; - } - else // xib - { - [[NSWorkspace sharedWorkspace] openFile:path]; - } -} - -- (void)openObjjFile:(NSString *)path line:(NSInteger)line -{ - NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; - - NSString *app, *type; - BOOL success = [workspace getInfoForFile:path application:&app type:&type]; - - if (!success) - { - NSBeep(); - return; - } - - NSBundle *bundle = [NSBundle bundleWithPath:app]; - NSString *identifier = bundle.bundleIdentifier; - NSString *executablePath = nil; - XCCLineSpecifier lineSpecifier = kLineSpecifierNone; - - if ([identifier hasPrefix:@"com.sublimetext."]) - { - lineSpecifier = kLineSpecifierColon; - executablePath = [[bundle sharedSupportPath] stringByAppendingPathComponent:@"bin/subl"]; - } - else if ([identifier isEqualToString:@"com.barebones.textwrangler"]) - { - lineSpecifier = kLineSpecifierColon; - executablePath = [[bundle bundlePath] stringByAppendingPathComponent:@"Contents/Helpers/edit"]; - } - else if ([identifier isEqualToString:@"com.barebones.bbedit"]) - { - lineSpecifier = kLineSpecifierColon; - executablePath = [[bundle bundlePath] stringByAppendingPathComponent:@"Contents/Helpers/bbedit"]; - } - else if ([identifier isEqualToString:@"com.macromates.textmate"]) // TextMate 1.x - { - lineSpecifier = kLineSpecifierMinusL; - executablePath = [[bundle sharedSupportPath] stringByAppendingPathComponent:@"Support/bin/mate"]; - } - else if ([identifier hasPrefix:@"com.macromates.TextMate"]) // TextMate 2.x - { - lineSpecifier = kLineSpecifierMinusL; - executablePath = [bundle pathForResource:@"mate" ofType:@""]; - } - else if ([identifier isEqualToString:@"com.chocolatapp.Chocolat"]) - { - lineSpecifier = kLineSpecifierMinusL; - executablePath = [[bundle sharedSupportPath] stringByAppendingPathComponent:@"choc"]; - } - else if ([identifier isEqualToString:@"org.vim.MacVim"]) - { - lineSpecifier = kLineSpecifierPlus; - executablePath = @"/usr/local/bin/mvim"; - } - else if ([identifier isEqualToString:@"org.gnu.Aquamacs"]) - { - if ([self.fm isExecutableFileAtPath:@"/usr/bin/aquamacs"]) - executablePath = @"/usr/bin/aquamacs"; - else if ([self.fm isExecutableFileAtPath:@"/usr/local/bin/aquamacs"]) - executablePath = @"/usr/local/bin/aquamacs"; - } - else if ([identifier isEqualToString:@"com.apple.dt.Xcode"]) - { - executablePath = [[bundle bundlePath] stringByAppendingPathComponent:@"Contents/Developer/usr/bin/xed"]; - } - - if (!executablePath || ![self.fm isExecutableFileAtPath:executablePath]) - { - [workspace openFile:path]; - return; - } - - NSArray *args; - - switch (lineSpecifier) - { - case kLineSpecifierNone: - args = @[path]; - break; - - case kLineSpecifierColon: - args = @[[NSString stringWithFormat:@"%1$@:%2$ld", path, line]]; - break; - - case kLineSpecifierMinusL: - args = @[@"-l", [NSString stringWithFormat:@"%ld", line], path]; - break; - - case kLineSpecifierPlus: - args = @[[NSString stringWithFormat:@"+%ld", line], path]; - break; - } - - [self runTaskWithLaunchPath:executablePath arguments:args returnType:kTaskReturnTypeNone]; -} - -- (BOOL)shouldShowErrorNotification -{ - return [[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCAutoShowNotificationOnErrors]; -} - -- (BOOL)shouldProcessWithCappLint -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - return [defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] - || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]; -} - -- (BOOL)shouldProcessWithObjjWarnings -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - return ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors]) && [defaults boolForKey:kDefaultXCCShouldProcessObjj]; -} - -- (void)showErrors -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && self.errorList.count) - { - [self openErrorsPanel:self]; - } -} - -- (void)showCappLintWarnings -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - NSUInteger numberError = [self.errorList count]; - NSDictionary *firstError; - NSUInteger i = 0; - - for (i = 0; i < numberError; i++) - { - NSDictionary *dict = [self.errorList objectAtIndex:i]; - - if ([[dict valueForKey:@"type"] isEqualToString: @"capp_lint"]) - { - firstError = dict; - break; - } - } - - if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && firstError) - [self openErrorsPanel:self]; - - if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint] && firstError) - { - NSDictionary *error = [self.errorList objectAtIndex:0]; - NSString *filename = [error objectForKey:@"path"]; - - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:self.projectId] , @"projectId", - @"Code Style Issues", @"title", - filename.lastPathComponent , @"message", - nil]; - - [self wantUserNotificationWithInfo:dict]; - } -} - -- (void)showObjjWarnings -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - NSUInteger numberError = [self.errorList count]; - NSDictionary *firstError; - NSUInteger i = 0; - - for (i = 0; i < numberError; i++) - { - NSDictionary *dict = [self.errorList objectAtIndex:i]; - - if ([[dict valueForKey:@"type"] isEqualToString: @"objj"]) - { - firstError = dict; - break; - } - } - - if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && firstError) - [self openErrorsPanel:self]; - - if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors] && firstError) - { - NSDictionary *error = [self.errorList objectAtIndex:0]; - NSString *filename = [error objectForKey:@"path"]; - - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:self.projectId] , @"projectId", - @"Compiling Issues", @"title", - filename.lastPathComponent , @"message", - nil]; - - [self wantUserNotificationWithInfo:dict]; - } -} - -- (void)pruneProcessingErrorsForProjectPath:(NSString *)path -{ - [self pruneProcessingErrorsForProjectPath:path type:nil]; -} - -- (void)pruneProcessingErrorsForProjectPath:(NSString *)path type:(NSString*)type -{ - // Remove all errors for the path being processed - NSIndexSet *matchingErrors = [self.errorList indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) - { - if (type) - return ([[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]) && [[obj valueForKey:@"type"] isEqualToString:type]; - else - return [[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]; - }]; - - [self.errorListController removeObjectsAtArrangedObjectIndexes:matchingErrors]; -} - -- (IBAction)clearErrors:(id)sender -{ - [self.errorList removeAllObjects]; - self.errorListController.content = self.errorList; -} - -- (BOOL)hasErrors -{ - NSInteger index = [self.errorList indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) - { - return [[obj valueForKey:@"status"] intValue] == XCCStatusCodeError; - }]; - - return index != NSNotFound; -} - -#pragma mark - objjj check - -- (NSString*)_getObjjIncludePaths -{ - NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"OBJJ_INCLUDE_PATHS ?= ?\\[\"(.*)\"\\," options:0 error:nil]; - - NSString *indexPath; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCUseDebugFrameworkWithObjj]) - indexPath = [NSString stringWithFormat:@"%@/index-debug.html", self.projectPath]; - else - indexPath = [NSString stringWithFormat:@"%@/index.html", self.projectPath]; - - NSDictionary *taskResult = [self runTaskWithLaunchPath:@"/bin/cat" arguments:[NSMutableArray arrayWithObject:indexPath] returnType:kTaskReturnTypeAny]; - - NSString *response = taskResult[@"response"]; - - NSArray *matches = [regulareExpressionFramework matchesInString:response options:0 range:NSMakeRange(0, [response length])]; - - for (NSTextCheckingResult *match in matches) - return [NSString stringWithFormat:@"%@/%@", self.projectPath, [response substringWithRange:[match rangeAtIndex:1]]]; - - return [NSString stringWithFormat:@"%@/%@", self.projectPath ,@"Frameworks/"]; -} - -- (BOOL)checkObjjWarningsForPath:(NSArray*)paths -{ - DDLogVerbose(@"Checking path %@ with objj", paths); - - NSUInteger numberOfFiles = [paths count]; - NSUInteger i = 0; - NSMutableArray *objjPaths = [NSMutableArray array]; - - // We only want the objj files - for (i = 0; i < numberOfFiles; i++) - { - NSString *path = [paths objectAtIndex:i]; - - if ([self isObjjFile:path]) - [objjPaths addObject:path]; - } - - if (![objjPaths count]) - return YES; - - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidStartNotification object:self]; - - NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-I", [self _getObjjIncludePaths], @"-m", nil]; - [arguments addObjectsFromArray:objjPaths]; - - NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"objj"] - arguments:arguments - returnType:kTaskReturnTypeStdOut]; - - NSInteger status = [taskResult[@"status"] intValue]; - NSString *response = taskResult[@"response"]; - - if (status == 0 && [response length] == 0) - { - [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; - return YES; - } - - NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; - - NSInteger numberOfErrors = [errors count]; - NSMutableArray *dicts = [NSMutableArray array]; - - // When checking of the entire project, we have to be ready to find errors - NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"([\\S\\s]*)(WARNING|ERROR) line ([0-9]*) in file\\:(.*)\\: ([\\S\\s]*)" options:0 error:nil]; - - NSString *filePath; - - if ([paths count] == 1) - filePath = [paths firstObject]; - - i = 0; - - for (i = 0; i < numberOfErrors; i++) - { - NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; - NSString *line; - NSString *path; - NSString *messageError; - - // We have an extra new line for the first error - if (i == 0) - error = (NSMutableString*)[error substringFromIndex:1]; - - NSArray *matches = [regulareExpressionFramework matchesInString:error options:0 range:NSMakeRange(0, [error length])]; - NSInteger j = 0; - - if (![matches count]) - { - // This shouldn't happen - DDLogVerbose(@"Error %@ doesn't respect any pattern", error); - - path = @""; - line = 0; - messageError = [NSString stringWithFormat:@"Compiling issue at line %@ of file %@:\n%@", line, path.lastPathComponent, error]; - } - - for (NSTextCheckingResult *match in matches) - { - for (j = 0; j < [match numberOfRanges]; j++) - { - switch (j) { - case 1: - messageError = [error substringWithRange:[match rangeAtIndex:j]]; - break; - - case 3: - line = [error substringWithRange:[match rangeAtIndex:j]]; - break; - - case 4: - path = [error substringWithRange:[match rangeAtIndex:j]]; - break; - - case 5: - messageError = [NSString stringWithFormat:@"Compiling issue at line %@ of file %@:\n%@ \n%@", line, path.lastPathComponent, [error substringWithRange:[match rangeAtIndex:j]], messageError]; - break; - - default: - break; - } - } - } - - // Make sure to delete all the compilations issue form the tableView - [self pruneProcessingErrorsForProjectPath:path type:@"objj"]; - - // Path and realPath are needed, we can get error on ViewController2.j while checking ViewController.j. - // When recompiling ViewController.j, realPath is used to know which errors have to be erased form the table - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInt:[line intValue]], @"line", - messageError , @"message", - (filePath ? filePath:path), @"path", - @"objj", @"type", - path , @"realPath", - nil]; - - // Block to compare dicts - BOOL (^dictComparaison)(id obj, NSUInteger idx, BOOL *stop) = ^(id obj, NSUInteger idx, BOOL *stop){ - if ([obj valueForKey:@"line"] == [dict valueForKey:@"line"]) - { - // For an unknown reason, trim doesn't work - NSString *messsageObj = [obj valueForKey:@"message"]; - NSString *messsageDict = [dict valueForKey:@"message"]; - - messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@" " withString:@""]; - messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - - messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@" " withString:@""]; - messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - - if ([messsageDict isEqualToString:messsageObj]) - { - *stop = YES; - return YES; - } - } - - return NO; - }; - - NSUInteger isInDict = [dicts indexOfObjectPassingTest:dictComparaison]; - NSUInteger isInList = [self.errorList indexOfObjectPassingTest:dictComparaison]; - - // Compiler can show several times the same errors - if (isInDict == NSNotFound && isInList == NSNotFound) - [dicts addObject:dict]; - } - - [self performSelectorOnMainThread:@selector(objjCompilerDidGenerateError:) withObject:dicts waitUntilDone:YES]; - - self.isProcessing = NO; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; - - return NO; -} - -- (IBAction)checkProjectWithObjj:(id)sender -{ - [self clearErrors:self]; - - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - [center addObserver:self selector:@selector(objjDidEndNotification:) name:XCCObjjDidEndNotification object:nil]; - - [self performSelectorInBackground:@selector(checkObjjWarningsForPath:) withObject:self.xCodeCappTargetedFiles]; -} - -- (void)objjDidEndNotification:(NSNotification*)aNotification -{ - [self showObjjWarnings]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCObjjDidEndNotification object:nil]; -} - -- (void)objjCompilerDidGenerateError:(NSArray*)errors -{ - [self.errorListController addObjects:errors]; -} - - -#pragma mark - capp_lint - -- (IBAction)checkProjectWithCappLint:(id)aSender -{ - [self clearErrors:self]; - - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - [center addObserver:self selector:@selector(cappLintDidEndNotification:) name:XCCCappLintDidEndNotification object:nil]; - - [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.xCodeCappTargetedFiles]; -} - -- (void)cappLintDidEndNotification:(NSNotification*)aNotification -{ - [self showCappLintWarnings]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCCappLintDidEndNotification object:nil]; -} - -- (BOOL)checkCappLintForPath:(NSArray*)paths -{ - DDLogVerbose(@"Checking path %@ with capp_lint", paths); - - NSUInteger numberOfFiles = [paths count]; - - if (!numberOfFiles) - return YES; - - self.isProcessing = YES; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidStartNotification object:self]; - - NSString *baseDirectory = [NSString stringWithFormat:@"--basedir='%@'", self.projectPath]; - NSMutableArray *arguments = [NSMutableArray arrayWithObjects:baseDirectory, nil]; - [arguments addObjectsFromArray:paths]; - - NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp_lint"] - arguments:arguments - returnType:kTaskReturnTypeStdOut]; - - NSInteger status = [taskResult[@"status"] intValue]; - - if (status == 0) - { - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidEndNotification object:self]; - return YES; - } - - NSString *response = taskResult[@"response"]; - NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; - - // We need to remove the first object who is the number of errors and the last object who is an empty line - [errors removeLastObject]; - [errors removeObjectAtIndex:0]; - - NSInteger numberOfErrors = [errors count]; - NSInteger i = 0; - NSString *path; - NSMutableArray *dicts = [NSMutableArray array]; - - if (numberOfFiles == 1) - path = [paths objectAtIndex:0]; - - for (i = 0; i < numberOfErrors; i++) - { - NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; - NSString *line; - NSString *firstCaract = [NSString stringWithFormat:@"%c" ,[error characterAtIndex:0]]; - - if ([[NSScanner scannerWithString:firstCaract] scanInt:nil]) - error = (NSMutableString*)[NSString stringWithFormat:@"%@:%@", path, error]; - - NSInteger positionOfFirstColon = [error rangeOfString:@":"].location; - - if (numberOfFiles > 1) - path = [error substringToIndex:positionOfFirstColon]; - - NSString *errorWithoutPath = [error substringFromIndex:(positionOfFirstColon + 1)]; - NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; - line = [errorWithoutPath substringToIndex:positionOfSecondColon]; - - NSString *messageError = [NSString stringWithFormat:@"Code style issue at line %@ of file %@:\n%@", line, path.lastPathComponent, errorWithoutPath]; - - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInt:[line intValue]], @"line", - messageError , @"message", - path, @"path", - @"capp_lint", @"type", - nil]; - - [dicts addObject:dict]; - } - - [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:YES]; - - self.isProcessing = NO; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidEndNotification object:self]; - - return NO; -} - -- (void)cappLintConversionDidGenerateError:(NSArray*)errors -{ - [self.errorListController addObjects:errors]; -} - -#pragma mark - Cappuccino update - -- (void)updateCappuccino -{ - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; - - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - [self.updatingCappuccinoPanel makeKeyAndOrderFront:self]; - - self.isCappuccinoUpdating = YES; - - [self.progressIndicator startAnimation:self]; - [self.progressIndicator setMaxValue:4]; - [self.progressIndicator setDoubleValue:0]; - - NSString *temporaryFolder = NSTemporaryDirectory(); - - if(![self _hasInitializedUpdateCappuccinoFromFolder:temporaryFolder] || - ![self _hasCleanedInstallOfCappuccinoFromFolder:temporaryFolder] || - ![self _hasInstalledCappuccinoFromFolder:temporaryFolder]) - return; - - [self notifyUserWithTitle:@"Update Cappuccino" message:@"Updating of Cappuccino completed"]; - [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Updating completed"]; - [self.progressIndicator stopAnimation:self]; - self.isCappuccinoUpdating = NO; - - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; -} - -- (BOOL)_hasInitializedUpdateCappuccinoFromFolder:(NSString*)aFolder -{ - //Be sure to remove an old install - NSMutableArray *rmArguments = [NSMutableArray arrayWithObjects:@"-r", @"cappuccino", nil]; - [self runTaskWithLaunchPath:self.executablePaths[@"rm"] - arguments:rmArguments - returnType:kTaskReturnTypeAny - currentDirectoryPath:aFolder]; - - - [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Downloading Cappuccino"]; - - // Download the file - NSString *cappuccinoURL; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch]) - cappuccinoURL = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"XCCLastCappuccinoMasterBranchURL"]; - else - cappuccinoURL = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"XCCLastCappuccinoReleaseURL"]; - - NSString *destination = [NSString stringWithFormat:@"%@cappuccino.zip", aFolder]; - NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-Lk", cappuccinoURL, @"-o", destination, nil]; - NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"curl"] - arguments:arguments - returnType:kTaskReturnTypeStdOut]; - - NSInteger status = [taskResult[@"status"] intValue]; - - if (status > 1) - { - [self _updatingCappuccinoFailedWithMessage:@"Unable to download Cappuccino"]; - return NO; - } - - //Unzip the file - NSMutableArray *unzipArguments = [NSMutableArray arrayWithObjects:@"-u", @"-o", @"-q", @"-d", @"cappuccino", @"cappuccino.zip", nil]; - NSDictionary *unzipTaskResult = [self runTaskWithLaunchPath:self.executablePaths[@"unzip"] - arguments:unzipArguments - returnType:kTaskReturnTypeAny - currentDirectoryPath:aFolder]; - - NSInteger unzipStatus = [unzipTaskResult[@"status"] intValue]; - - if (unzipStatus >= 1) - { - DDLogVerbose(@"Unable to unzip Cappuccino"); - [self _updatingCappuccinoFailedWithMessage:@"Unable to unzip Cappuccino"]; - return NO; - } - - return YES; -} - -- (BOOL)_hasCleanedInstallOfCappuccinoFromFolder:(NSString*)aFolder -{ - NSString* path = [self _cappuccinoPathForFolder:aFolder]; - - [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Jake clobber"]; - - //Jake clobber - NSMutableArray *jakeClobberArguments = [NSMutableArray arrayWithObjects:@"clobber", nil]; - NSDictionary *jakeClobberTaskResult = [self runJakeTaskWithArguments:jakeClobberArguments currentDirectoryPath:path]; - - NSInteger jakeInstallStatus = [jakeClobberTaskResult[@"status"] intValue]; - - if (jakeInstallStatus == 1) - { - DDLogVerbose(@"Jake clobber failed: %@", jakeClobberTaskResult[@"response"]); - [self _updatingCappuccinoFailedWithMessage:@"Jake clobber failed"]; - return NO; - } - - return YES; -} - -- (BOOL)_hasInstalledCappuccinoFromFolder:(NSString*)aFolder -{ - NSString* path = [self _cappuccinoPathForFolder:aFolder]; - - [self _incrementeProgressBarAndUpdateInformationFieldWithMessage:@"Jake install"]; - - //Jake install - NSMutableArray *jakeInstallArguments = [NSMutableArray arrayWithObjects:@"install", nil]; - NSDictionary *jakeInstallTaskResult = [self runJakeTaskWithArguments:jakeInstallArguments currentDirectoryPath:path]; - - NSInteger jakeInstallStatus = [jakeInstallTaskResult[@"status"] intValue]; - - if (jakeInstallStatus == 1) - { - DDLogVerbose(@"Jake install failed: %@", jakeInstallTaskResult[@"response"]); - [self _updatingCappuccinoFailedWithMessage:@"Jake install failed"]; - return NO; - } - - return YES; -} - -- (NSDictionary*)runJakeTaskWithArguments:(NSMutableArray*)arguments currentDirectoryPath:(NSString*)aCurrentDirectoryPath -{ - NSString *launchPath = self.executablePaths[@"jake"]; - - NSTask *task = [NSTask new]; - - task.launchPath = launchPath; - task.arguments = arguments; - task.environment = self.environment; - task.standardOutput = [NSPipe new]; - task.standardError = [NSPipe new]; - - if (aCurrentDirectoryPath) - task.currentDirectoryPath = aCurrentDirectoryPath; - - // This is needed to log the jake - NSFileHandle* fhOut = [task.standardOutput fileHandleForReading]; - [fhOut readInBackgroundAndNotify]; - NSFileHandle* fhErr = [task.standardError fileHandleForReading]; - [fhErr readInBackgroundAndNotify]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jakeReceivedData:) name:NSFileHandleReadCompletionNotification object:fhOut]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jakeReceivedError:) name:NSFileHandleReadCompletionNotification object:fhErr]; - - [task launch]; - - DDLogVerbose(@"Task launched: %@\n%@", launchPath, arguments); - - [task waitUntilExit]; - - DDLogVerbose(@"Task exited: %@:%d", launchPath, task.terminationStatus); - - NSNumber *status = [NSNumber numberWithInt:task.terminationStatus]; - NSData *data = nil; - - if ([status intValue] == 0) - data = [[task.standardOutput fileHandleForReading] availableData]; - else - data = [[task.standardError fileHandleForReading] availableData]; - - NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - - [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:fhOut]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:fhErr]; - - return @{@"status" : status, @"response" : response}; -} - --(void)jakeReceivedData:(NSNotification*)notification -{ - NSData *data = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem]; - NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; - - DDLogVerbose(@"%@", string); - - [[notification object] readInBackgroundAndNotify]; -} - --(void)jakeReceivedError:(NSNotification*)notification -{ - NSData *data = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem]; - NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; - - DDLogVerbose(@"%@", string); -} - -/*! - This return the current path where the tmp cappuccino was downloaded - */ -- (NSString*)_cappuccinoPathForFolder:(NSString*)aFolder -{ - NSFileManager *fileManger = [NSFileManager defaultManager]; - NSString *contentOfCappuccinoFolder = [[fileManger contentsOfDirectoryAtPath:[NSString stringWithFormat:@"%@cappuccino", aFolder] error:nil] firstObject]; - - return [NSString stringWithFormat:@"%@cappuccino/%@", aFolder, contentOfCappuccinoFolder]; -} - -- (void)_incrementeProgressBarAndUpdateInformationFieldWithMessage:(NSString*)aString -{ - double currentValue = [self.progressIndicator doubleValue]; - [self.progressIndicator setDoubleValue:++currentValue]; - - [self.fieldCurrentTask setStringValue:[NSString stringWithFormat:@"Step %.0f/%.0f : %@", [self.progressIndicator doubleValue], [self.progressIndicator maxValue], aString]]; -} - -- (void)_updatingCappuccinoFailedWithMessage:(NSString*)aMessage -{ - [self.progressIndicator stopAnimation:self]; - [self.progressIndicator setDoubleValue:0]; - [self.fieldCurrentTask setStringValue:[NSString stringWithFormat:@"Issue : %@", aMessage]]; - - [self notifyUserWithTitle:@"Error updating Cappuccino" message:aMessage]; - - self.isCappuccinoUpdating = NO; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; -} - - -#pragma mark - User notifications - -- (NSString *)applicationNameForGrowl -{ - return @"XcodeCapp"; -} - -- (void)notifyUserWithTitle:(NSString *)aTitle message:(NSString *)aMessage -{ - if ([NSUserNotificationCenter class]) - { - NSUserNotification *note = [NSUserNotification new]; - note.title = aTitle; - note.informativeText = aMessage; - - [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:note]; - } - else - { - [GrowlApplicationBridge notifyWithTitle:aTitle - description:aMessage - notificationName:GROWL_NOTIFICATIONS_DEFAULT - iconData:nil - priority:0 - isSticky:NO - clickContext:nil]; - } -} - -- (void)wantUserNotificationWithInfo:(NSDictionary *)info -{ - [self performSelectorOnMainThread:@selector(notifyUserWithInfo:) withObject:info waitUntilDone:NO]; -} - -- (void)notifyUserWithInfo:(NSDictionary *)info -{ - if ([info[@"projectId"] intValue] != self.projectId) - return; - - [self notifyUserWithTitle:info[@"title"] message:info[@"message"]]; -} - -- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification -{ - // Notification Center may decide not to show a notification. We always want them to show. - return YES; -} - -- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification -{ - if ([self.errorList count]) - [self openErrorsPanel:self]; - - [center removeDeliveredNotification:notification]; -} - -@end - - -@implementation XcodeCapp (SnowLeopard) - -- (void)updateLastModificationDate:(NSDate *)date forPath:(NSString *)path -{ - if (date) - [self.pathModificationDates setObject:date forKey:path]; - else - [self.pathModificationDates removeObjectForKey:path]; - - [[NSUserDefaults standardUserDefaults] setObject:self.pathModificationDates forKey:kDefaultPathModificationDates]; -} - -- (NSDate *)lastModificationDateForPath:(NSString *)path -{ - if (!self.pathModificationDates) - { - self.pathModificationDates = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:kDefaultPathModificationDates] mutableCopy]; - - if (!self.pathModificationDates) - self.pathModificationDates = [NSMutableDictionary new]; - } - - if ([self.pathModificationDates valueForKey:path] != nil) - return [self.pathModificationDates valueForKey:path]; - else - return self.appStartedTimestamp; -} - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m b/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m index 325df5feb..d6d8f165d 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m @@ -29,12 +29,11 @@ static const char *kCloseXcodeProjectScript = + (void)closeXcodeProjectForProject:(NSString *)projectPath { - NSString *format = [NSString stringWithUTF8String:kCloseXcodeProjectScript]; - NSString *source = [NSString stringWithFormat:format, projectPath]; - NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source]; + NSString *format = @(kCloseXcodeProjectScript); + NSString *source = [NSString stringWithFormat:format, projectPath]; + NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source]; - NSAppleEventDescriptor *descriptor; - descriptor = [script executeAndReturnError:nil]; + [script executeAndReturnError:nil]; } @end diff --git a/Tools/XcodeCapp/XcodeCapp/YRKSpinningProgressIndicator.h b/Tools/XcodeCapp/XcodeCapp/YRKSpinningProgressIndicator.h new file mode 100755 index 000000000..8b7ff78d6 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/YRKSpinningProgressIndicator.h @@ -0,0 +1,26 @@ +// +// YRKSpinningProgressIndicator.h +// +// Copyright 2009 Kelan Champagne. All rights reserved. +// + +@import Cocoa; + + +@interface YRKSpinningProgressIndicator : NSView + +@property (nonatomic, copy) NSColor *color; +@property (nonatomic, copy) NSColor *backgroundColor; +@property (nonatomic, assign) BOOL drawsBackground; + +@property (nonatomic, assign, getter=isDisplayedWhenStopped) BOOL displayedWhenStopped; +@property (nonatomic, assign) BOOL usesThreadedAnimation; + +@property (nonatomic, assign, getter=isIndeterminate) BOOL indeterminate; +@property (nonatomic, assign) CGFloat currentValue; +@property (nonatomic, assign) CGFloat maxValue; + +- (void)stopAnimation:(id)sender; +- (void)startAnimation:(id)sender; + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/YRKSpinningProgressIndicator.m b/Tools/XcodeCapp/XcodeCapp/YRKSpinningProgressIndicator.m new file mode 100755 index 000000000..2e2b36763 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/YRKSpinningProgressIndicator.m @@ -0,0 +1,392 @@ +// +// YRKSpinningProgressIndicator.m +// +// Copyright 2009 Kelan Champagne. All rights reserved. +// + +#import "YRKSpinningProgressIndicator.h" + +// Some constants to control the animation +const CGFloat kAlphaWhenStopped = 0.15; +const CGFloat kFadeMultiplier = 0.85l; +const NSUInteger kNumberOfFins = 12; +const NSTimeInterval kFadeOutTime = 0.7; // seconds + +@interface YRKSpinningProgressIndicator () +@end + + +@implementation YRKSpinningProgressIndicator +{ + + BOOL _isAnimating; + BOOL _isFadingOut; + int _currentPosition; + NSMutableArray* _finColors; + NSTimer* _animationTimer; + NSThread* _animationThread; + NSDate* _fadeOutStartTime; +} + +#pragma mark - Init + +- (void)awakeFromNib +{ + [self _init]; +} + +- (instancetype)initWithFrame:(NSRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) + { + [self _init]; + } + + return self; +} + +- (void)_init +{ + _currentPosition = 0; + _finColors = [[NSMutableArray alloc] initWithCapacity:kNumberOfFins]; + + _isAnimating = NO; + _isFadingOut = NO; + + // user setter, to generate all fin colors + self.color = [NSColor blackColor]; + _backgroundColor = [NSColor clearColor]; + _drawsBackground = NO; + + _displayedWhenStopped = YES; + _usesThreadedAnimation = YES; + + _indeterminate = YES; + _currentValue = 0.0; + _maxValue = 100.0; +} + +#pragma mark - NSView overrides + +- (void)viewDidMoveToWindow +{ + [super viewDidMoveToWindow]; + + // No window? View hierarchy may be going away. Dispose timer to clear circular retain of timer to self to timer. + if (![self window]) + [self actuallyStopAnimation]; + else if (_isAnimating) + [self actuallyStartAnimation]; +} + +- (void)drawRect:(NSRect)rect +{ + const CGSize size = self.bounds.size; + const CGFloat length = MIN(size.height, size.width); + + // fill the background, if set + if (_drawsBackground) + { + [_backgroundColor set]; + [NSBezierPath fillRect:[self bounds]]; + } + + CGContextRef ctx = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; + + // Move the CTM so 0,0 is at the center of our bounds + CGContextTranslateCTM(ctx, size.width/2, size.height/2); + + if (_indeterminate) + { + NSBezierPath *path = [[NSBezierPath alloc] init]; + // magic constants determined empirically, to make it look like the NS version. + const CGFloat lineWidth = 0.0859375 * length; // should be 2.75 for 32x32 + const CGFloat lineStart = 0.234375 * length; // should be 7.5 for 32x32 + const CGFloat lineEnd = 0.421875 * length; // should be 13.5 for 32x32 + [path setLineWidth:lineWidth]; + [path setLineCapStyle:NSRoundLineCapStyle]; + [path moveToPoint:NSMakePoint(0, lineStart)]; + [path lineToPoint:NSMakePoint(0, lineEnd)]; + + // Draw all the fins by rotating the CTM, then just redraw the same path again. + for (NSUInteger i = 0; i < kNumberOfFins; i++) + { + NSColor *c = _isAnimating ? _finColors[i] : [_color colorWithAlphaComponent:kAlphaWhenStopped]; + [c set]; + [path stroke]; + + CGContextRotateCTM(ctx, 2 * M_PI/kNumberOfFins); + } + } + else + { + CGFloat lineWidth = 1 + (0.01 * length); + CGFloat circleRadius = (length - lineWidth) / 2.1; + NSPoint circleCenter = NSMakePoint(0, 0); + [_color set]; + NSBezierPath *path = [[NSBezierPath alloc] init]; + [path setLineWidth:lineWidth]; + [path appendBezierPathWithOvalInRect:NSMakeRect(-circleRadius, + -circleRadius, + circleRadius * 2, + circleRadius * 2)]; + [path stroke]; + path = [[NSBezierPath alloc] init]; + [path appendBezierPathWithArcWithCenter:circleCenter radius:circleRadius startAngle:90 endAngle:90-(360*(_currentValue/_maxValue)) clockwise:YES]; + [path lineToPoint:circleCenter] ; + [path fill]; + } +} + + +#pragma mark - NSProgressIndicator API + +- (void)startAnimation:(id)sender +{ + if (!_indeterminate || (_isAnimating && !_isFadingOut)) + return; + + [self actuallyStartAnimation]; +} + +- (void)stopAnimation:(id)sender +{ + // animate to stopped state + _isFadingOut = YES; + _fadeOutStartTime = [NSDate date]; +} + +/// Only the spinning style is implemented +- (void)setStyle:(NSProgressIndicatorStyle)style +{ + if (NSProgressIndicatorSpinningStyle != style) + NSAssert(NO, @"Non-spinning styles not available."); +} + + +#pragma mark - Custom Accessors + +- (void)setColor:(NSColor *)value +{ + if (_color != value) + { + _color = [value copy]; + + // Set all the fin colors, with their current alpha components. + for (NSUInteger i = 0; i < kNumberOfFins; i++) + { + CGFloat alpha = [self alphaValueForPosition:i]; + _finColors[i] = [_color colorWithAlphaComponent:alpha]; + } + + [self setNeedsDisplay:YES]; + } +} + +- (void)setBackgroundColor:(NSColor *)value +{ + if (_backgroundColor != value) + { + _backgroundColor = [value copy]; + [self setNeedsDisplay:YES]; + } +} + +- (void)setDrawsBackground:(BOOL)value +{ + if (_drawsBackground != value) + _drawsBackground = value; + + [self setNeedsDisplay:YES]; +} + +- (void)setIsIndeterminate:(BOOL)isIndeterminate +{ + _indeterminate = isIndeterminate; + + if (!_indeterminate && _isAnimating) + [self stopAnimation:self]; + + [self setNeedsDisplay:YES]; +} + +- (void)setCurrentValue:(CGFloat)currentValue +{ + // Automatically put it into determinate mode if it's not already. + if (_indeterminate) + self.indeterminate = NO; + + _currentValue = currentValue; + [self setNeedsDisplay:YES]; +} + +- (void)setMaxValue:(CGFloat)maxValue +{ + _maxValue = maxValue; + [self setNeedsDisplay:YES]; +} + +- (void)setUsesThreadedAnimation:(BOOL)useThreaded +{ + if (_usesThreadedAnimation != useThreaded) + { + _usesThreadedAnimation = useThreaded; + + if (_isAnimating) { + // restart the timer to use the new mode + [self stopAnimation:self]; + [self startAnimation:self]; + } + } +} + +- (void)setDisplayedWhenStopped:(BOOL)displayedWhenStopped +{ + _displayedWhenStopped = displayedWhenStopped; + + // Show/hide ourself if necessary + if (!_isAnimating) + self.hidden = !_displayedWhenStopped; +} + + +#pragma mark - Private + +- (void)updateFrameFromTimer:(NSTimer *)timer +{ + // update the colors + const CGFloat minAlpha = _displayedWhenStopped ? kAlphaWhenStopped : 0.0; + + for (NSUInteger i = 0; i < kNumberOfFins; i++) + { + CGFloat newAlpha = MAX([self alphaValueForPosition:i], minAlpha); + _finColors[i] = [_color colorWithAlphaComponent:newAlpha]; + } + + if (_isFadingOut) + { + // check if the fadeout is done + if ([_fadeOutStartTime timeIntervalSinceNow] < -kFadeOutTime) + [self actuallyStopAnimation]; + } + + // draw now instead of waiting for setNeedsDisplay (that's the whole reason + // we're animating from background thread) + if (_usesThreadedAnimation) + [self display]; + else + [self setNeedsDisplay:YES]; + + // update the currentPosition for next time, unless fading out + if (!_isFadingOut) + _currentPosition = (_currentPosition + 1) % kNumberOfFins; +} + +/// Returns the alpha value for the given position. +/// Each fin should fade exponentially over _numberOfFins frames of animation. +/// @param position is [0,kNumberOfFins) +- (CGFloat)alphaValueForPosition:(NSUInteger)position +{ + CGFloat normalValue = pow(kFadeMultiplier, (position + _currentPosition) % kNumberOfFins); + + if (_isFadingOut) + { + NSTimeInterval timeSinceStop = -[_fadeOutStartTime timeIntervalSinceNow]; + normalValue *= kFadeOutTime - timeSinceStop; + } + + return normalValue; +} + +- (void)actuallyStartAnimation +{ + // Just to be safe kill any existing timer. + [self actuallyStopAnimation]; + + _isAnimating = YES; + _isFadingOut = NO; + + // always start from the top + _currentPosition = 0; + + if (!_displayedWhenStopped) + [self setHidden:NO]; + + if ([self window]) + { + // Why animate if not visible? viewDidMoveToWindow will re-call this method when needed. + if (_usesThreadedAnimation) + { + _animationThread = [[NSThread alloc] initWithTarget:self selector:@selector(animateInBackgroundThread) object:nil]; + [_animationThread start]; + } + else + { + _animationTimer = [NSTimer timerWithTimeInterval:(NSTimeInterval)0.05 + target:self + selector:@selector(updateFrameFromTimer:) + userInfo:nil + repeats:YES]; + + [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSRunLoopCommonModes]; + [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSDefaultRunLoopMode]; + [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSEventTrackingRunLoopMode]; + } + } +} + +- (void)actuallyStopAnimation +{ + _isAnimating = NO; + _isFadingOut = NO; + + if (!_displayedWhenStopped) + [self setHidden:YES]; + + if (_animationThread) + { + // we were using threaded animation + [_animationThread cancel]; + + if (![_animationThread isFinished]) { + [[NSRunLoop currentRunLoop] runMode:NSModalPanelRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.05]]; + } + + _animationThread = nil; + } + else if (_animationTimer) + { + // we were using timer-based animation + [_animationTimer invalidate]; + _animationTimer = nil; + } + + [self setNeedsDisplay:YES]; +} + +- (void)animateInBackgroundThread +{ + @autoreleasepool + { + // Set up the animation speed to subtly change with size > 32. + // int animationDelay = 38000 + (2000 * ([self bounds].size.height / 32)); + + // Set the rev per minute here + int omega = 100; // RPM + int animationDelay = 60 * 1000000 / omega / kNumberOfFins; + int poolFlushCounter = 0; + + do { + [self updateFrameFromTimer:nil]; + usleep(animationDelay); + poolFlushCounter++; + if (poolFlushCounter > 256) { + poolFlushCounter = 0; + } + } while (![[NSThread currentThread] isCancelled]); + } +} + +@end diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/InfoPlist.strings b/Tools/XcodeCapp/XcodeCapp/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8..000000000 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib deleted file mode 100644 index 1b8e7e2ac..000000000 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ /dev/null @@ -1,3964 +0,0 @@ - - - - 1060 - 14C94b - 6254 - 1344.60 - 757.30 - - 6254 - 6254 - - - NSArrayController - NSBox - NSButton - NSButtonCell - NSCustomObject - NSImageCell - NSImageView - NSMenu - NSMenuItem - NSPopUpButton - NSPopUpButtonCell - NSProgressIndicator - NSScrollView - NSScroller - NSTableColumn - NSTableView - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - PDFView - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.pdfkit.ibplugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - NSFontManager - - - - - - - Create Project... - - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - - - - Open Project… - - 2147483647 - - - - - - Open Recent - - 2147483647 - - - - - - Open Xcode Project - - 2147483647 - - - 1 - - - - YES - YES - - - 2147483647 - - - - - - Check Compilation Issues - - 2147483647 - - - - - - Check Project Code Style - - 2147483647 - - - - - - Synchronize Project - - 2147483647 - - - - - - Show in %@ - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Errors & Warnings - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Update Cappuccino - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - About XcodeCapp... - - 2147483647 - - - - - - Preferences… - - 2147483647 - - - - - - XcodeCapp Help - - 2147483647 - - - 7 - - - - YES - YES - - - 2147483647 - - - - - - Quit XcodeCapp - - 2147483647 - - - - - - - AppController - - - 3 - 2 - {{196, 240}, {402, 247}} - 1618478080 - About - NSPanel - - - - - 256 - - - - 268 - {{164, 20}, {203, 143}} - - - - YES - - 68157504 - 4326400 - WGNvZGVDYXBwIDMgZGV2ZWxvcGVkIGJ5OgogICAgQXBhcmFqaXRhIEZpc2htYW4KICAgIGFwYXJhaml0 -YUBhcGFyYWppdGEuY29tCiAgICAKICAgIEFsZXhhbmRyZSBXaWxoZWxtCiAgICBhbGV4YW5kcmUud2ls -aGVsbWZyQGdtYWlsLmNvbQoKT3JpZ2luYWwgQ29jb2EgdmVyc2lvbiBkZXZlbG9wZWQgYnk6CiAgICBB -bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - - YES - 11 - 3100 - - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MC4zMTM0MzA2NDI2AA - - - NO - 1 - - - - 266 - {{164, 171}, {221, 74}} - - - - YES - - 68157504 - 4326400 - XcodeCapp 3.0.0 - - Zapfino - 18 - 16 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - textColor - - 3 - MAA - - - - NO - 1 - - - - 268 - - 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 - - {{17, 108}, {128, 128}} - - - - YES - - 0 - 33554432 - - NSImage - icon_128x128 - - 0 - 0 - 0 - NO - - NO - YES - - - {402, 247} - - - - - {{0, 0}, {1440, 877}} - {10000000000000, 10000000000000} - NO - - - 143 - 2 - {{890, 663}, {550, 237}} - 1613759488 - Reporting - NSPanel - - - {315, 77} - - - 256 - - - - 274 - - - - 2322 - - - - 256 - {550, 201} - - - - YES - NO - YES - - - 256 - {15, 20} - - - - error - 536 - 40 - 1000 - - 75497536 - 2048 - Error - - - 3 - MC4zMzMzMzI5ODU2AA - - - 6 - System - headerTextColor - - - - - 69206081 - 2304 - Text Cell - - - - 6 - System - controlBackgroundColor - - - - 6 - System - controlTextColor - - - - 1 - YES - - - - 14 - 10 - - - 1 - MSAxIDEgMAA - - 30 - -1832910848 - - - 5 - -1 - 0 - NO - 0 - 1 - - - {{1, 1}, {550, 201}} - - - - - - 4 - YES - - - - -2147483392 - {{1, 273}, {512, 16}} - - - - NO - _doScroller: - - 1 - - _doScroller: - - - - -2147483392 - {{535, 1}, {16, 45}} - - - - NO - _doScroller: - - - _doScroller: - - - {{-1, 35}, {552, 203}} - - - - 133682 - - - - QSAAAEEgAABCIAAAQiAAAA - 0.25 - 4 - 1 - - - - 289 - {{352, 8}, {85, 19}} - - - - {250, 750} - YES - - -2080374784 - 134217728 - Clear - - YES - 12 - 787 - - - -2038284288 - 164 - - - - 400 - 75 - - NO - - - - 292 - {{20, 8}, {85, 19}} - - - - {250, 750} - YES - - -1543503872 - 134217728 - Open - - - -2038284288 - 164 - - - - 400 - 75 - - NO - - - - 289 - {{445, 8}, {85, 19}} - - - - {250, 750} - YES - - -2080374784 - 134217728 - Close - - - -2038284288 - 164 - - - - 400 - 75 - - NO - - - {550, 237} - - - - - {{0, 0}, {1440, 877}} - {315, 99} - {10000000000000, 10000000000000} - - YES - - - 3 - 2 - {{534, 231}, {389, 528}} - 1613235200 - Preferences - NSWindow - - - - - 256 - - - - 12 - - - - 274 - - - - 268 - {{16, 136}, {271, 18}} - - - - YES - - -2080374784 - 0 - Load the most recent project on launch - - YES - 13 - 1044 - - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 400 - 75 - - NO - - - - 268 - {{16, 106}, {241, 18}} - - - - YES - - -2080374784 - 0 - Automatically open Xcode projects - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 76}, {260, 18}} - - - - YES - - -2080374784 - 0 - Errors & Warnings panel always on top - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 45}, {330, 18}} - - - - YES - - -2080374784 - 0 - Active xCodeCapp when opening the Errors panel - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 164}, {298, 18}} - - - - YES - - -2080374784 - 0 - Symlink frameworks when creating projects - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 17}, {106, 17}} - - - - YES - - 68157504 - 272630784 - Recent projects: - - - - - - NO - 1 - - - - 268 - {{125, 11}, {56, 26}} - - - - YES - - -2076180416 - 2048 - - YES - 13 - 1301 - - - 109199360 - 129 - - .LucidaGrandeUI - 13 - 16 - - - - 400 - 75 - - - 30 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - 10 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 20 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 2 - 1 - YES - YES - 2 - - NO - - - {{1, 1}, {353, 194}} - - - - - - {{17, 303}, {355, 210}} - - - - {0, 0} - - 67108864 - 134217728 - Projects - - - - 6 - System - labelColor - - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{149, 12}, {171, 18}} - - - - YES - - -2080374784 - 0 - Open reporting window - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 40}, {126, 17}} - - - - YES - - 68157504 - 272630784 - Compilation issues: - - - - - - NO - 1 - - - - 268 - {{149, 37}, {171, 18}} - - - - YES - - -2080374784 - 0 - Show notification - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 93}, {192, 18}} - - - - YES - - -2080374784 - 0 - Look for compilation issues - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 67}, {301, 18}} - - - - YES - - -2080374784 - 0 - Use include path from the index-debug file - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - {{1, 1}, {353, 124}} - - - - - - {{17, 159}, {355, 140}} - - - - {0, 0} - - 67108864 - 134217728 - File processing - - - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{146, 12}, {171, 18}} - - - - YES - - -2080374784 - 0 - Open reporting window - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{146, 37}, {171, 18}} - - - - YES - - -2080374784 - 0 - Show notification - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 38}, {126, 17}} - - - - YES - - 68157504 - 272630784 - Code style issues: - - - - - - NO - 1 - - - {{1, 1}, {353, 65}} - - - - _NS:11 - - - {{17, 74}, {355, 81}} - - - - _NS:9 - {0, 0} - - 67108864 - 0 - Code style - - - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {226, 18}} - - - - YES - - -2080374784 - 0 - Use latest master branch version - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - {{1, 1}, {353, 38}} - - - - - - {{17, 16}, {355, 54}} - - - - {0, 0} - - 67108864 - 134217728 - Update - - - - - - 1 - 0 - 2 - NO - - - {389, 528} - - - - - {{0, 0}, {1440, 877}} - {10000000000000, 10000000000000} - xcc-prefs - YES - - - 15 - 2 - {{163, 199}, {716, 662}} - 1618478080 - XcodeCapp Help - NSWindow - - - - - 256 - - - - 18 - - - NSFilenamesPboardType - - {{0, 8}, {716, 654}} - - - - YES - 1 - NO - 1 - YES - - - {716, 662} - - - - - {{0, 0}, {1440, 877}} - {10000000000000, 10000000000000} - YES - - - YES - - - XcodeCapp - - - - message - file - - YES - - YES - YES - YES - - - 7 - 2 - {{139, 81}, {357, 84}} - 1685586944 - Updating Cappuccino - NSPanel - - - - - 256 - - - - 268 - {{18, 22}, {251, 17}} - - - - _NS:397 - {251, 750} - YES - - 68157504 - 272630784 - Step 1/5 : Downloading Cappuccino - - _NS:397 - - - - - NO - 1 - - - - 268 - {{269, 13}, {74, 32}} - - - - _NS:9 - YES - - 67108864 - 134217728 - Close - - _NS:9 - - -2038284288 - 129 - - Gw - 200 - 25 - - NO - - - - 268 - {{20, 45}, {317, 20}} - - - - _NS:9 - {250, 250} - 16397 - 5 - - - {357, 84} - - - - _NS:21 - - {{0, 0}, {1440, 877}} - {10000000000000, 10000000000000} - updatingCappuccinoPanel - YES - - - - NO - - - - delegate - - - - 694 - - - - terminate: - - - - 695 - - - - delegate - - - - 874 - - - - createProject: - - - - kGC-iR-GHt - - - - loadProject: - - - - 864 - - - - showInFinder: - - - - 872 - - - - openAbout: - - - - 615 - - - - openPreferences: - - - - 796 - - - - openHelp: - - - - 612 - - - - aboutWindow - - - - 613 - - - - helpView - - - - 858 - - - - helpWindow - - - - 610 - - - - menuItemHistory - - - - 621 - - - - menuItemOpenProject - - - - 869 - - - - menuItemOpenXcodeProject - - - - 873 - - - - menuItemShowInFinder - - - - 871 - - - - preferencesController - - - - 616 - - - - preferencesWindow - - - - 795 - - - - statusMenu - - - - 607 - - - - xcc - - - - 617 - - - - updateCappuccino: - - - - M7T-qw-MgB - - - - performClose: - - - - 625 - - - - save: - - - - 634 - - - - save: - - - - 841 - - - - save: - - - - Qld-lL-7rM - - - - save: - - - - 849 - - - - save: - - - - 821 - - - - save: - - - - Buu-6t-pce - - - - save: - - - - XTE-kN-O4x - - - - save: - - - - 6Xe-Bt-eXK - - - - save: - - - - 30N-ga-LBo - - - - save: - - - - kBr-PF-Ng7 - - - - save: - - - - HyN-S0-KXD - - - - save: - - - - A92-fj-Uci - - - - save: - - - - 0Il-yd-iuZ - - - - openXcodeProject: - - - - 866 - - - - synchronizeProject: - - - - 867 - - - - openErrorsPanel: - - - - 774 - - - - clearErrors: - - - - 751 - - - - openErrorInEditor: - - - - 786 - - - - clearErrors - - - - 749 - - - - errorListController - - - - 760 - - - - errorsPanel - - - - 775 - - - - symlinkRadioButton - - - - UhG-7c-NP8 - - - - errorTable - - - - 748 - - - - fieldCurrentTask - - - - P4O-YG-v1J - - - - progressIndicator - - - - Z7k-63-Ujv - - - - updatingCappuccinoPanel - - - - HJ3-bt-3EP - - - - checkProjectWithCappLint: - - - - bwf-Gu-ART - - - - checkProjectWithObjj: - - - - oPW-bl-Ydt - - - - values.XCCReopenLastProject - - - - - - value: values.XCCReopenLastProject - value - values.XCCReopenLastProject - - NSValidatesImmediately - - - 2 - - - 636 - - - - errorTable - - - - - - doubleClickArgument: errorTable - doubleClickArgument - errorTable - - NSSelectorName - openErrorInEditor: - - 2 - - - 787 - - - - delegate - - - - 753 - - - - self - - - - - - doubleClickTarget: self - doubleClickTarget - self - - NSSelectorName - openErrorInEditor: - - - 2 - - - 788 - - - - dataSource - - - - 752 - - - - arrangedObjects.message - - - - - - value: arrangedObjects.message - value - arrangedObjects.message - 2 - - - 770 - - - - bundleVersion - - - - - - displayPatternValue1: bundleVersion - displayPatternValue1 - bundleVersion - - NSDisplayPattern - XcodeCapp %{value1}@ - - 2 - - - 800 - - - - projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - 875 - - - - xcodeProjectCanBeOpened - - - - - - enabled: xcodeProjectCanBeOpened - enabled - xcodeProjectCanBeOpened - - 2 - - - 876 - - - - selection.@count - - - - - - enabled: selection.@count - enabled - selection.@count - 2 - - - 765 - - - - errorList - - - - - - contentArray: errorList - contentArray - errorList - 2 - - - 762 - - - - values.maxRecentProjects - - - - - - selectedValue: values.maxRecentProjects - selectedValue - values.maxRecentProjects - 2 - - - 810 - - - - projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - 812 - - - - values.XCCAutoOpenErrorsPanelOnErrors - - - - - - value: values.XCCAutoOpenErrorsPanelOnErrors - value - values.XCCAutoOpenErrorsPanelOnErrors - - NSValidatesImmediately - - - 2 - - - 824 - - - - values.autoOpenXcodeProject - - - - - - value: values.autoOpenXcodeProject - value - values.autoOpenXcodeProject - - NSValidatesImmediately - - - 2 - - - 851 - - - - projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - 861 - - - - isCappBuildDefined - - - - - - enabled: isCappBuildDefined - enabled - isCappBuildDefined - 2 - - - HUA-hI-eLR - - - - toolTipSymlinkRadioButton - - - - - - toolTip: toolTipSymlinkRadioButton - toolTip - toolTipSymlinkRadioButton - 2 - - - bWz-Mw-z56 - - - - values.useSymlinkWhenCreatingProject - - - - - - value: values.useSymlinkWhenCreatingProject - value - values.useSymlinkWhenCreatingProject - - NSValidatesImmediately - - - 2 - - - aRN-Fd-MPN - - - - value: values.XCCAutoOpenErrorsPanelOnCappLint - - - - - - value: values.XCCAutoOpenErrorsPanelOnCappLint - value - values.XCCAutoOpenErrorsPanelOnCappLint - - NSValidatesImmediately - - - 2 - - - du5-hg-MfC - - - - orderOut: - - - - dP2-Fc-one - - - - value: values.XCCPanelActiveAppWhenOpening - - - - - - value: values.XCCPanelActiveAppWhenOpening - value - values.XCCPanelActiveAppWhenOpening - - NSValidatesImmediately - - - 2 - - - kgU-89-aRS - - - - value: values.XCCPanelStyleUtility - - - - - - value: values.XCCPanelStyleUtility - value - values.XCCPanelStyleUtility - - NSValidatesImmediately - - - 2 - - - uUW-Ro-3aA - - - - value: values.updateCappuccinoWithLastVersionOfMasterBranch - - - - - - value: values.updateCappuccinoWithLastVersionOfMasterBranch - value - values.updateCappuccinoWithLastVersionOfMasterBranch - - NSValidatesImmediately - - - 2 - - - 1fo-ym-Q0u - - - - projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - b84-dT-kSk - - - - value: values.XCCAutoShowNotificationOnCappLint - - - - - - value: values.XCCAutoShowNotificationOnCappLint - value - values.XCCAutoShowNotificationOnCappLint - - NSValidatesImmediately - - - 2 - - - uwx-aq-p86 - - - - enabled: projectPath.length - - - - - - enabled: projectPath.length - enabled - projectPath.length - 2 - - - a7g-oH-Wxj - - - - value: values.XCCAutoOpenShowNotificationErrors - - - - - - value: values.XCCAutoOpenShowNotificationErrors - value - values.XCCAutoOpenShowNotificationErrors - - NSValidatesImmediately - - - 2 - - - j0c-o6-KBW - - - - enabled: isCappuccinoUpdating - - - - - - enabled: isCappuccinoUpdating - enabled - isCappuccinoUpdating - - NSValueTransformerName - NSNegateBoolean - - 2 - - - aof-Pn-nzf - - - - value: values.kDefaultXCCUseDebugFrameworkWithObjj - - - - - - value: values.kDefaultXCCUseDebugFrameworkWithObjj - value - values.kDefaultXCCUseDebugFrameworkWithObjj - - NSValidatesImmediately - - - 2 - - - 8Eb-cw-Tsj - - - - value: values.XCCShouldProcessObjj - - - - - - value: values.XCCShouldProcessObjj - value - values.XCCShouldProcessObjj - - NSValidatesImmediately - - - 2 - - - 4tf-7Y-tid - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 420 - - - - - 538 - - - - - - - - - - - - - - - - - - - - - - - - - - itE-v1-Sv4 - - - - - 605 - - - - - 597 - - - - - 606 - - - - - 859 - - - - - 811 - - - - - 860 - - - - - 603 - - - - - 604 - - - - - PcB-xW-jUW - - - - - 598 - - - - - 600 - - - - - 537 - - - - - 601 - - - - - 599 - - - - - 602 - - - - - 539 - - - - - 540 - - - - - - - - 592 - - - - - - - - - - 593 - - - - - - - - 596 - - - - - 594 - - - - - - - - 595 - - - - - 797 - - - - - - - - 798 - - - - - 541 - - - - - - - - 581 - - - - - - - - - - - 582 - - - - - - - - - - 588 - - - - - 589 - - - - - 584 - - - - - - - - 585 - - - - - 754 - - - - - - - - 755 - - - - - 583 - - - - - - - - 586 - - - - - 542 - - - - - - - - 558 - - - - - - - - - - - 847 - - - - - - - - - - - - - - 563 - - - - - - - - 576 - - - - - 839 - - - - - - - - 840 - - - - - 1qI-ol-J5k - - - - - - - - 272-W8-Ygy - - - - - 801 - - - - - - - - 802 - - - - - 803 - - - - - - - - 804 - - - - - - - - 805 - - - - - - - - - - 806 - - - - - 807 - - - - - 808 - - - - - 848 - - - - - - - - - - - - 819 - - - - - - - - 820 - - - - - 817 - - - - - - - - 818 - - - - - 544 - - - - - 545 - - - XCodeCapp - - - 759 - - - Errors Controller - - - 587 - - - - - - - - 590 - - - - - - - - 591 - - - - - 543 - - - - - - - - 553 - - - - - - - - 857 - - - - - iiD-Nj-M6o - - - - - - - - BYW-Rk-rZ4 - - - - - qFm-3c-NH7 - - - - - - - - - - 2M5-3o-Zwl - - - - - - - - sZm-jR-Tet - - - - - QAd-SJ-XIV - - - - - - - - ptR-WM-qet - - - - - cwr-C6-dkY - - - - - - - - dTw-kK-6IJ - - - - - M7S-MC-N7d - - - - - - - - GR3-Dn-qSe - - - - - - - - LOW-1X-7ih - - - - - om5-3M-ZoK - - - - - ubl-jf-ybu - - - - - 8BD-V9-Gcp - - - - - - - - E18-tY-KOl - - - - - - - - - - 9wn-zh-iT9 - - - - - - - - 5vI-kk-gfO - - - - - D0i-5i-RLQ - - - - - - - - KxJ-gX-jZV - - - - - o12-G8-NOm - - - - - wDc-Ir-hmE - - - - - - - - beY-m1-Aia - - - - - wGK-ie-cgv - - - - - - - - fJB-o4-AhU - - - - - SNH-t4-Ay7 - - - - - GDP-7Q-0W5 - - - - - - - - QpC-n8-rmF - - - - - CQP-MN-ubd - - - - - - - - GLQ-ZT-xXR - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {182, 582.5} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - {345, 214.5} - com.apple.InterfaceBuilder.CocoaPlugin - - - - {-173.5, 372} - com.apple.InterfaceBuilder.CocoaPlugin - - - - {650, 268} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.pdfkit.ibplugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - If this is checked, xCodeCapp will be the main application of the system when the errors & warnings panel is about to open - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - If this is checked, the error panel will be a floating panel. - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - If this is checked, xCodeCapp will take the last version of Cappuccino on the master branch to install Cappuccino - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - AppController - NSObject - - id - id - id - id - - - - createProject: - id - - - loadProject: - id - - - openAbout: - id - - - openHelp: - id - - - - NSPanel - PDFView - NSWindow - NSMenuItem - NSMenuItem - NSMenuItem - NSUserDefaultsController - NSWindow - NSMenu - XcodeCapp - - - - aboutWindow - NSPanel - - - helpView - PDFView - - - helpWindow - NSWindow - - - menuItemHistory - NSMenuItem - - - menuItemOpenProject - NSMenuItem - - - menuItemShowInFinder - NSMenuItem - - - preferencesController - NSUserDefaultsController - - - preferencesWindow - NSWindow - - - statusMenu - NSMenu - - - xcc - XcodeCapp - - - - IBProjectSource - ../XcodeCapp/AppController.h - - - - AppController - - id - id - id - id - id - id - id - - - - createProject: - id - - - loadProject: - id - - - openAbout: - id - - - openHelp: - id - - - openPreferences: - id - - - showInFinder: - id - - - updateCappuccino: - id - - - - IBProjectSource - ../XcodeCapp/AppController.m - - - - XcodeCapp - NSObject - - id - id - id - id - id - id - - - - checkProjectWithCappLint: - id - - - clearErrors: - id - - - openErrorInEditor: - id - - - openErrorsPanel: - id - - - openXcodeProject: - id - - - synchronizeProject: - id - - - - NSArrayController - NSTableView - NSPanel - NSTextField - NSProgressIndicator - NSPanel - - - - errorListController - NSArrayController - - - errorTable - NSTableView - - - errorsPanel - NSPanel - - - fieldCurrentTask - NSTextField - - - progressIndicator - NSProgressIndicator - - - updatingCappuccinoPanel - NSPanel - - - - IBProjectSource - ../XcodeCapp/XcodeCapp.h - - - - XcodeCapp - - id - id - id - id - id - id - id - - - - checkProjectWithCappLint: - id - - - checkProjectWithObjj: - id - - - clearErrors: - id - - - openErrorInEditor: - id - - - openErrorsPanel: - id - - - openXcodeProject: - id - - - synchronizeProject: - id - - - - IBProjectSource - ../XcodeCapp/XcodeCapp.m - - - - - - NSActionCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSActionCell.h - - - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSArrayController - NSObjectController - - IBFrameworkSource - AppKit.framework/Headers/NSArrayController.h - - - - NSBox - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSBox.h - - - - NSButton - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSButton.h - - - - NSButtonCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSButtonCell.h - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSController - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSController.h - - - - NSFontManager - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSImageCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSImageCell.h - - - - NSImageView - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSImageView.h - - - - NSManagedObjectContext - NSObject - - IBFrameworkSource - CoreData.framework/Headers/NSManagedObjectContext.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMenuItemCell - NSButtonCell - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItemCell.h - - - - NSObjectController - NSController - - IBFrameworkSource - AppKit.framework/Headers/NSObjectController.h - - - - NSPanel - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSPanel.h - - - - NSPopUpButton - NSButton - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButton.h - - - - NSPopUpButtonCell - NSMenuItemCell - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButtonCell.h - - - - NSProgressIndicator - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSProgressIndicator.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSScrollView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSScrollView.h - - - - NSScroller - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSScroller.h - - - - NSTableColumn - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableColumn.h - - - - NSTableView - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSTextFieldCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSTextFieldCell.h - - - - NSUserDefaultsController - NSController - - IBFrameworkSource - AppKit.framework/Headers/NSUserDefaultsController.h - - - - NSView - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - PDFView - NSView - - id - id - id - id - id - id - id - id - id - id - - - - goBack: - id - - - goForward: - id - - - goToFirstPage: - id - - - goToLastPage: - id - - - goToNextPage: - id - - - goToPreviousPage: - id - - - selectAll: - id - - - takeBackgroundColorFrom: - id - - - zoomIn: - id - - - zoomOut: - id - - - - IBFrameworkSource - Quartz.framework/Frameworks/PDFKit.framework/Headers/PDFView.h - - - - - 0 - IBCocoaFramework - YES - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - {12, 12} - {10, 2} - {15, 15} - {128, 128} - - - diff --git a/Tools/XcodeCapp/XcodeCapp/main.m b/Tools/XcodeCapp/XcodeCapp/main.m index c4385ce48..dc637170b 100644 --- a/Tools/XcodeCapp/XcodeCapp/main.m +++ b/Tools/XcodeCapp/XcodeCapp/main.m @@ -2,13 +2,12 @@ // main.m // XcodeCapp // -// Created by Aparajita on 4/18/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. +// Created by Alexandre Wilhelm on 5/5/15. +// Copyright (c) 2015 cappuccino-project. All rights reserved. // #import -int main(int argc, char *argv[]) -{ - return NSApplicationMain(argc, (const char **)argv); +int main(int argc, const char * argv[]) { + return NSApplicationMain(argc, argv); } diff --git a/Tools/XcodeCapp/xcc/main.m b/Tools/XcodeCapp/xcc/main.m deleted file mode 100644 index 451663896..000000000 --- a/Tools/XcodeCapp/xcc/main.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// main.m -// xcc -// -// Created by Aparajita on 5/9/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#import - -#import "XcodeProjectCloser.h" - - -static void usage() -{ - fprintf(stderr, "Usage: xcc [options] [directory]\n" - "\n" - "Options:\n" - " --help Show this help and exit\n" - " --reset Resets Xcode support files before opening\n\n"); -} - -static bool handleOptions(NSMutableArray *options, NSString *path) -{ - NSFileManager *fm = [NSFileManager defaultManager]; - - path = path.stringByStandardizingPath.stringByResolvingSymlinksInPath; - - while (options.count) - { - NSString *option = options.lastObject; - [options removeLastObject]; - - if ([options containsObject:option]) - return false; - - if ([option isEqualToString:@"--reset"]) - { - if (!path) - return false; - - NSString *xcodePath = [path stringByAppendingPathComponent:@".XcodeSupport"]; - [fm removeItemAtPath:xcodePath error:nil]; - - NSString *projectName = [NSString stringWithFormat:@"%@.xcodeproj", path.lastPathComponent]; - xcodePath = [path stringByAppendingPathComponent:projectName]; - - [XcodeProjectCloser closeXcodeProjectForProject:xcodePath]; - - [fm removeItemAtPath:xcodePath error:nil]; - printf("Reset %s\n", path.UTF8String); - } - else - return false; - } - - return true; -} - -static NSString* validatePath(NSString *path) -{ - // Use an NSURL to resolve paths that start with "." - NSURL *url = [NSURL fileURLWithPath:path]; - path = url.path; - - NSFileManager *fm = [NSFileManager defaultManager]; - BOOL isDirectory; - BOOL exists = [fm fileExistsAtPath:path isDirectory:&isDirectory]; - - if (exists && isDirectory) - return path; - else - { - if (!exists) - fprintf(stderr, "The directory %s does not exist.\n", path.UTF8String); - else - fprintf(stderr, "%s is not a directory.\n", path.UTF8String); - - return nil; - } -} - - -int main(int argc, const char * argv[]) -{ - @autoreleasepool - { - NSArray *args = [[NSProcessInfo processInfo] arguments]; - BOOL validArgs = args.count == 1; - NSString *path = nil; - NSMutableArray *options = [NSMutableArray new]; - - for (NSInteger i = 1; i < args.count; ++i) - { - NSString *arg = args[i]; - - // Once we get a directory, no other arguments are valid - if (path) - { - validArgs = NO; - break; - } - - if ([arg hasPrefix:@"-"]) - { - [options addObject:arg]; - } - else if (!path) - { - path = validatePath(arg); - - if (path) - validArgs = YES; - else - return 1; - } - else - { - validArgs = NO; - break; - } - } - - if (validArgs) - { - if (handleOptions(options, path)) - { - NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-b", @"org.cappuccino.xcodecapp", @"-g", nil]; - - if (path) - [arguments addObject:path]; - - NSTask *task = [[NSTask alloc] init]; - task.launchPath = @"/usr/bin/open"; - task.arguments = arguments; - [task launch]; - } - else - usage(); - } - else - usage(); - } - - return 0; -} - diff --git a/Tools/XcodeCapp/xcc/xcc-Prefix.pch b/Tools/XcodeCapp/xcc/xcc-Prefix.pch deleted file mode 100644 index 3ab4e33a8..000000000 --- a/Tools/XcodeCapp/xcc/xcc-Prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'xcc' target in the 'xcc' project -// - -#ifdef __OBJC__ - #import -#endif diff --git a/Tools/capp_env/Jakefile b/Tools/capp_env/Jakefile new file mode 100644 index 000000000..76516aa8e --- /dev/null +++ b/Tools/capp_env/Jakefile @@ -0,0 +1,9 @@ + +require ("../../common.jake"); + +var FILE = require("file"), + SYSTEM = require("system"), + path = FILE.Path(FILE.join(SYSTEM.prefix, "bin", "capp_env")); + +sudo(["cp", "-f", "capp_env", path]); +sudo(["chmod", "755", path]); diff --git a/Tools/capp_env/README.md b/Tools/capp_env/README.md new file mode 100644 index 000000000..4cae152a5 --- /dev/null +++ b/Tools/capp_env/README.md @@ -0,0 +1,45 @@ +# capp_env + +`capp_env` is a simple virtual environment tool for Cappuccino. + + +## Usage + +To create a virtual environment: + + capp_env -p /path/to/the/env + +This will create + + /path/to/the/env + /bin + /build + /sources # if you want to put your sources here, but it is optional + /narwhal + +It will download the latest `cappuccino_base`, put it in `narwhal` and will create an `activate` file in `/path/to/the/env/bin` + +Then you can activate this environment by doing: + + source /path/to/the/env/bin/activate + +your current `PATH` will be updated to look for `jake` and `capp` and all the tools from `/path/to/the/env/narwhal/bin`, and will set `CAPP_BUILD` to be `/path/to/the/env/build`. + +From now on, you can clone the Cappuccino sources, (in `sources` for instance) and do + + jake install + +If you install the Cappuccino source while in an virtual env, all the tools will use the debug version that you just built (for instance, `nib2cib` will be used from `/path/to/the/env/build/Debug/CommonJS/cappuccino/bin/nib2cib`) + + +## Deactivate + +Just close the current terminal, or run + + capp_env_deactivate + + +## TODOs + + - let a chance to select the current cappuccino base version to download + - find a way to make XcodeCapp to use these environements \ No newline at end of file diff --git a/Tools/capp_env/capp_env b/Tools/capp_env/capp_env new file mode 100755 index 000000000..66ce4e65d --- /dev/null +++ b/Tools/capp_env/capp_env @@ -0,0 +1,120 @@ +#!/usr/bin/python + +import os +import argparse + +ACTIVATE_SCRIPT = """ +capp_env_deactivate() { + if [ -n "$__OLD_PATH" ] ; then + PATH="$__OLD_PATH" + export PATH + unset __OLD_PATH + fi; + + if [ -n "$__OLD_CAPP_BUILD" ] ; then + CAPP_BUILD="$__OLD_CAPP_BUILD" + export CAPP_BUILD + unset __OLD_CAPP_BUILD + fi; + + if [ -n "$__OLD_PS1" ] ; then + PS1="$__OLD_PS1" + export PS1 + unset __OLD_PS1 + fi; + + unset __VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + unset -f capp_env_deactivate + fi +} + +capp_env_deactivate nondestructive + +__VIRTUAL_ENV="%s" +__OLD_PATH="$PATH" +__OLD_CAPP_BUILD="$CAPP_BUILD" +__OLD_PS1="$PS1" + +CAPP_BUILD="$__VIRTUAL_ENV/build" +export CAPP_BUILD + +PATH="$CAPP_BUILD/Debug/CommonJS/cappuccino/bin:$CAPP_BUILD/Debug/CommonJS/objective-j/bin/:$__VIRTUAL_ENV/narwhal/bin:$PATH" +export PATH + +PS1="(`basename \"$__VIRTUAL_ENV\"`)$PS1" +export PS1 +""" + +def exec_shell(command, error_message=None, expected=0): + """ + Execute a shell command + """ + ret = os.system(command) + if ret != expected: + if error_message: + raise Exception(error_message) + else: + raise Exception("Error during command %s. expected %d, got %d" % (command, expected, ret)) + + +def create_environment(env_path): + """ + Create the base environement folder + """ + if os.path.exists(env_path): + print "Path already exists. abort" + return + os.makedirs(env_path) + os.makedirs("%s/sources" % env_path) + os.makedirs("%s/build" % env_path) + os.makedirs("%s/bin" % env_path) + + +def install_cappuccino_base(env_path): + """ + Install latest version of Cappuccino Base + """ + exec_shell("curl https://raw.githubusercontent.com/cappuccino/cappuccino/v0.9.7-1/bootstrap.sh >/tmp/cb.sh") + exec_shell("bash /tmp/cb.sh --directory '%s/narwhal' --noprompt" % (env_path)) + exec_shell("rm /tmp/cb.sh") + + +def install_activate(env_path): + """ + Create the env/bin/activate script + """ + absolute_path = os.path.abspath(env_path) + f = open("%s/bin/activate" % env_path, 'w') + f.write(ACTIVATE_SCRIPT % absolute_path) + f.close() + exec_shell("chmod u+x %s/bin/activate" % env_path) + + + + + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description="Virtual Env For Cappuccino.") + + parser.add_argument('-p', "--path", + dest="env_path", + help="Path of the virtual environement", + required=True, + type=str) + + parser.add_argument('-a', "--activate-only", + dest="activate_only", + help="Only reinstall the activate script", + action="store_true") + + args = parser.parse_args() + + if args.activate_only: + install_activate(args.env_path) + else: + create_environment(args.env_path) + install_cappuccino_base(args.env_path) + install_activate(args.env_path) diff --git a/Tools/nib2cib/Converter.j b/Tools/nib2cib/Converter.j index 549a32bdf..09407a086 100644 --- a/Tools/nib2cib/Converter.j +++ b/Tools/nib2cib/Converter.j @@ -119,8 +119,19 @@ ConverterConversionException = @"ConverterConversionException"; // Compile xib or nib to make sure we have a non-new format nib. temporaryNibFilePath = FILE.join("/tmp", FILE.basename(aFilePath) + ".tmp.nib"); - if (OS.popen(["/usr/bin/ibtool", aFilePath, "--compile", temporaryNibFilePath]).wait() === 1) - [CPException raise:ConverterConversionException reason:@"Could not compile file: " + aFilePath]; + try + { + var p = OS.popen(["/usr/bin/ibtool", aFilePath, "--compile", temporaryNibFilePath]); + if (p.wait() === 1) + [CPException raise:ConverterConversionException reason:@"Could not compile file: " + aFilePath]; + } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); + } + } else { @@ -130,8 +141,18 @@ ConverterConversionException = @"ConverterConversionException"; // Convert from binary plist to XML plist var temporaryPlistFilePath = FILE.join("/tmp", FILE.basename(aFilePath) + ".tmp.plist"); - if (OS.popen(["/usr/bin/plutil", "-convert", "xml1", temporaryNibFilePath, "-o", temporaryPlistFilePath]).wait() === 1) - [CPException raise:ConverterConversionException reason:@"Could not convert to xml plist for file: " + aFilePath]; + try + { + var p = OS.popen(["/usr/bin/plutil", "-convert", "xml1", temporaryNibFilePath, "-o", temporaryPlistFilePath]); + if (p.wait() === 1) + [CPException raise:ConverterConversionException reason:@"Could not convert to xml plist for file: " + aFilePath]; + } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); + } if (!FILE.isReadable(temporaryPlistFilePath)) [CPException raise:ConverterConversionException reason:@"Unable to convert nib file."]; diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 8dbc498ee..a45eac2e5 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -88,6 +88,8 @@ @import "NSSortDescriptor.j" @import "NSPopover.j" @import "NSProgressIndicator.j" +@import "NSAppearance.j" +@import "NSVisualEffectView.j" function CP_NSMapClassName(aClassName) diff --git a/Tools/nib2cib/NSAppearance.j b/Tools/nib2cib/NSAppearance.j new file mode 100644 index 000000000..fc5f62b4d --- /dev/null +++ b/Tools/nib2cib/NSAppearance.j @@ -0,0 +1,52 @@ +/* + * NSAppearance.j + * nib2cib + * + * Created by Antoine Mercadal. + * Copyright 2015, Cappuccino Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import + + +@implementation CPAppearance (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + if (self = [super init]) + { + _name = [aCoder decodeObjectForKey:@"NSAppearanceName"].replace(/^NS/, "CP"); + } + + return self; +} + +@end + +@implementation NSAppearance : CPAppearance + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPAppearance class]; +} + +@end diff --git a/Tools/nib2cib/NSCell.j b/Tools/nib2cib/NSCell.j index 8be4737b8..c92566d74 100644 --- a/Tools/nib2cib/NSCell.j +++ b/Tools/nib2cib/NSCell.j @@ -31,27 +31,28 @@ @implementation NSCell : CPObject { - int _state @accessors(readonly, getter=state); - BOOL _isHighlighted @accessors(readonly, getter=isHighlighted); - BOOL _isEnabled @accessors(readonly, getter=isEnabled); - BOOL _isEditable @accessors(readonly, getter=isEditable); - BOOL _isBordered @accessors(readonly, getter=isBordered); - BOOL _isBezeled @accessors(readonly, getter=isBezeled); - BOOL _isSelectable @accessors(readonly, getter=isSelectable); - BOOL _isScrollable @accessors(readonly, getter=isScrollable); - BOOL _isContinuous @accessors(readonly, getter=isContinuous); - BOOL _scrolls @accessors(readonly, getter=scrolls); - BOOL _wraps @accessors(readonly, getter=wraps); - BOOL _truncates @accessors(readonly, getter=truncates); - BOOL _sendsActionOnEndEditing @accessors(readonly, getter=sendsActionOnEndEditing); - CPTextAlignment _alignment @accessors(readonly, getter=alignment); - CPControlSize _controlSize @accessors(readonly, getter=controlSize); - id _objectValue @accessors(readonly, getter=objectValue); - CPFont _font @accessors(readonly, getter=font); - int _lineBreakMode @accessors(readonly, getter=lineBreakMode); - CPFormatter _formatter @accessors(readonly, getter=formatter); - int _tag @accessors(readonly, getter=tag); - BOOL _usesSingleLineMode @accessors(readonly, getter=usesSingleLineMode); + int _state @accessors(readonly, getter=state); + BOOL _isHighlighted @accessors(readonly, getter=isHighlighted); + BOOL _isEnabled @accessors(readonly, getter=isEnabled); + BOOL _isEditable @accessors(readonly, getter=isEditable); + BOOL _isBordered @accessors(readonly, getter=isBordered); + BOOL _isBezeled @accessors(readonly, getter=isBezeled); + BOOL _isSelectable @accessors(readonly, getter=isSelectable); + BOOL _isScrollable @accessors(readonly, getter=isScrollable); + BOOL _isContinuous @accessors(readonly, getter=isContinuous); + BOOL _scrolls @accessors(readonly, getter=scrolls); + BOOL _wraps @accessors(readonly, getter=wraps); + BOOL _truncates @accessors(readonly, getter=truncates); + BOOL _sendsActionOnEndEditing @accessors(readonly, getter=sendsActionOnEndEditing); + CPTextAlignment _alignment @accessors(readonly, getter=alignment); + CPWritingDirection _baseWritingDirection @accessors(readonly, getter=baseWritingDirection); + CPControlSize _controlSize @accessors(readonly, getter=controlSize); + id _objectValue @accessors(readonly, getter=objectValue); + CPFont _font @accessors(readonly, getter=font); + int _lineBreakMode @accessors(readonly, getter=lineBreakMode); + CPFormatter _formatter @accessors(readonly, getter=formatter); + int _tag @accessors(readonly, getter=tag); + BOOL _usesSingleLineMode @accessors(readonly, getter=usesSingleLineMode); } - (id)initWithCoder:(CPCoder)aCoder @@ -76,6 +77,7 @@ _wraps = !(flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; _truncates = (flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; _alignment = (flags2 & 0x1c000000) >> 26; + _baseWritingDirection = ((flags2 & 0x6000) >> 13) - 1; _lineBreakMode = (flags2 & 0x0E00) >> 9; _controlSize = (flags2 & 0xE0000) >> 17; _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; diff --git a/Tools/nib2cib/NSControl.j b/Tools/nib2cib/NSControl.j index a20eb426b..0123d2b00 100644 --- a/Tools/nib2cib/NSControl.j +++ b/Tools/nib2cib/NSControl.j @@ -61,6 +61,7 @@ [self setObjectValue:[cell objectValue]]; [self setFont:[cell font]]; [self setAlignment:[cell alignment]]; + [self setBaseWritingDirection:[cell baseWritingDirection]]; [self setContinuous:[cell isContinuous]]; [self setLineBreakMode:[cell lineBreakMode]]; [self setFormatter:[cell formatter]]; diff --git a/Tools/nib2cib/NSFont.j b/Tools/nib2cib/NSFont.j index eda3caac2..1aea6d5e9 100644 --- a/Tools/nib2cib/NSFont.j +++ b/Tools/nib2cib/NSFont.j @@ -22,7 +22,8 @@ @import -IBDefaultFontFace = @"Lucida Grande"; +IBDefaultFontFace = @".AppleSystemUIFont"; +IBDefaultFontFaceLegacy = @"Lucida Grande"; IBDefaultFontSize = 13.0; var OS = require("os"), @@ -59,7 +60,7 @@ var OS = require("os"), - (id)cibFontForNibFont { - if (_name === IBDefaultFontFace) + if (_name === IBDefaultFontFaceLegacy || _name == IBDefaultFontFace) { if (_size === IBDefaultFontSize && !_isBold && !_isItalic) return nil; @@ -83,7 +84,7 @@ var OS = require("os"), if (self !== [NSFont class]) return; - CPLog.debug("NSFont: default IB font: %s %f", IBDefaultFontFace, IBDefaultFontSize); + CPLog.debug("NSFont: default IB font: %s (legacy %s) %f", IBDefaultFontFace, IBDefaultFontFaceLegacy, IBDefaultFontSize); } + (CPString)descriptorForFont:(CPFont)aFont diff --git a/Tools/nib2cib/NSView.j b/Tools/nib2cib/NSView.j index ad996f35a..e25ce5eff 100644 --- a/Tools/nib2cib/NSView.j +++ b/Tools/nib2cib/NSView.j @@ -52,6 +52,7 @@ var NSViewAutoresizingMask = 0x3F, _window = [aCoder decodeObjectForKey:@"NSWindow"]; _superview = [aCoder decodeObjectForKey:@"NSSuperview"]; _subviews = [aCoder decodeObjectForKey:@"NSSubviews"]; + _appearance = [aCoder decodeObjectForKey:@"NSAppearance"]; _hierarchyScaleSize = CGSizeMake(1.0 , 1.0); _scaleSize = CGSizeMake(1.0, 1.0); diff --git a/Tools/nib2cib/NSVisualEffectView.j b/Tools/nib2cib/NSVisualEffectView.j new file mode 100644 index 000000000..809f5def2 --- /dev/null +++ b/Tools/nib2cib/NSVisualEffectView.j @@ -0,0 +1,57 @@ +/* + * NSVisualEffectView.j + * nib2cib + * + * Created by Antoine Mercadal. + * Copyright 2015, Cappuccino Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import + + +@implementation CPVisualEffectView (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + if (self = [super NS_initWithCoder:aCoder]) + { + _material = [aCoder decodeObjectForKey:@"NSVisualEffectViewMaterial"]; + _state = [aCoder decodeObjectForKey:@"NSVisualEffectViewState"]; + + // this is not supported + // _blendingMode = [aCoder decodeObjectForKey:@"NSVisualEffectViewBlendingMode"]; + _blendingMode = CPVisualEffectBlendingModeWithinWindow; + } + + return self; +} + +@end + +@implementation NSVisualEffectView : CPVisualEffectView + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPVisualEffectView class]; +} + +@end diff --git a/Tools/nib2cib/main.j b/Tools/nib2cib/main.j index b5296c7b8..1bdc7aef1 100644 --- a/Tools/nib2cib/main.j +++ b/Tools/nib2cib/main.j @@ -28,27 +28,7 @@ var OS = require("os"), function main(args) { - checkUlimit(); - var nib2cib = [[Nib2Cib alloc] initWithArgs:args]; [nib2cib run]; } - -function checkUlimit() -{ - var minUlimit = 1024, - p = OS.popen(["ulimit", "-n"]); - - if (p.wait() === 0) - { - var limit = p.stdout.read().split("\n")[0]; - - if (Number(limit) < minUlimit) - { - stream.print("\0red(\0bold(WARNING:\0)\0) nib2cib may need to open more files than this terminal session currently allows (" + limit + "). Add the following line to your login configuration file (.bash_profile, .bashrc, etc.), start a new terminal session, then try again:\n"); - stream.print("ulimit -n " + minUlimit); - OS.exit(1); - } - } -} diff --git a/Tools/objj2objcskeleton/Jakefile b/Tools/objj2objcskeleton/Jakefile new file mode 100644 index 000000000..5d8bb01f0 --- /dev/null +++ b/Tools/objj2objcskeleton/Jakefile @@ -0,0 +1,9 @@ + +require ("../../common.jake"); + +var FILE = require("file"), + SYSTEM = require("system"), + path = FILE.Path(FILE.join(SYSTEM.prefix, "bin", "objj2objcskeleton")); + +sudo(["cp", "-f", "objj2objcskeleton", path]); +sudo(["chmod", "755", path]); diff --git a/Tools/XcodeCapp/XcodeCapp/Scripts/parser.j b/Tools/objj2objcskeleton/objj2objcskeleton similarity index 90% rename from Tools/XcodeCapp/XcodeCapp/Scripts/parser.j rename to Tools/objj2objcskeleton/objj2objcskeleton index 1d4a27fea..83a8ffe75 100644 --- a/Tools/XcodeCapp/XcodeCapp/Scripts/parser.j +++ b/Tools/objj2objcskeleton/objj2objcskeleton @@ -1,32 +1,26 @@ -/* - * parser.j - * - * Created by Francisco Tolmasky. - * Modified by Antoine Mercadal, with great help from Martin Carlberg - * Copyright 2008-2013, 280 North, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ +#!/usr/bin/env objj @import var FILE = require("file"), OS = require("os"), - stream = require("narwhal/term").stream, + stream = require("narwhal/term").stream; - SLASH_REPLACEMENT = "∕"; // DIVISION SLASH, Unicode: U+2215 +function main(args) +{ + args.shift(); + + if (args.length < 1) + return printUsage(); + + parser(args); +} + +function printUsage() +{ + print("objj2objskeleton [FILE] [DESTINATION]"); + print("Convert a objective-j file to an objective-c files skeleton (.h and .m)") +} // Debug function to print some JS objects function dump(obj) @@ -131,29 +125,30 @@ function compile(node, state, visitor) c(node, state); }; -function shadowBaseNameForPath(projectBasePath, path) +function removeLastSlashIfNecessary(path) { - // Make the path project-relative - path = path.substring(projectBasePath.length + 1, path.length); + if (path[path.length - 1] == "/") + return path.substring(0, path.length - 1); - // strip the extension and replace slashes - return path.substring(0, path.length - 2).replace(/[/]/g, SLASH_REPLACEMENT); + return path; } /* - $1 Project base path - $2 Full project source path + $1 Full project source path + $2 Destination + $-n name of the cocoa files */ -function main(args) +function parser(args) { try { - var projectBasePath = args[1], - sourcePath = args[2], - outputDirectory = [projectBasePath stringByAppendingPathComponent:@".XcodeSupport"], - baseFilename = shadowBaseNameForPath(projectBasePath, sourcePath), - outputHeaderURL = new CFURL([outputDirectory stringByAppendingPathComponent:baseFilename + ".h"]), - outputImplementationURL = new CFURL([outputDirectory stringByAppendingPathComponent:baseFilename + ".m"]), + var sourcePath = args.shift(), + projectBasePath = removeLastSlashIfNecessary(args.shift()), + outputDirectory = projectBasePath, + baseFilename = [sourcePath lastPathComponent], + baseFilenameWithNoExtension = args.shift() == "-n" ? args.shift() : baseFilename.substring(0, baseFilename.length - 2), + outputHeaderURL = new CFURL([outputDirectory stringByAppendingPathComponent:baseFilenameWithNoExtension + ".h"]), + outputImplementationURL = new CFURL([outputDirectory stringByAppendingPathComponent:baseFilenameWithNoExtension + ".m"]), source = FILE.read(sourcePath, { charset: "UTF-8" }), flags = ObjectiveJ.Preprocessor.Flags.IncludeDebugSymbols | ObjectiveJ.Preprocessor.Flags.IncludeTypeSignatures, tokens = ObjectiveJ.acorn.parse(source, { locations:true, sourceFile:sourcePath }), @@ -179,7 +174,7 @@ function main(args) if (aClass.superClass) ObjectiveCHeader += [CPString stringWithFormat:@"\n@interface %@ : %@", aClass.name, NSCompatibleClassName(aClass.superClass)]; else - ObjectiveCHeader += [CPString stringWithFormat:@"\n@interface %@ (%@)", aClass.name, aClass.category]; + ObjectiveCHeader += [CPString stringWithFormat:@"\n@interface %@ (%@)", NSCompatibleClassName(aClass.name, NO), aClass.category]; // add each outlet in header if (aClass.outlets.length > 0) @@ -205,7 +200,7 @@ function main(args) ObjectiveCHeader += "\n@end\n"; // fill up the implementation file - ObjectiveCSource += "\n@implementation " + aClass.name + "\n@end\n"; + ObjectiveCSource += "\n@implementation " + NSCompatibleClassName(aClass.name, NO) + "\n@end\n"; }); if (ObjectiveCSource.length) @@ -218,7 +213,7 @@ function main(args) { [errors addObject:@{ @"message": e.message, - @"path": sourcePath, + @"sourcePath": sourcePath, @"line": e.line }]; @@ -609,5 +604,7 @@ var NSClasses = { "NSWindow" : YES, "NSWindowController" : YES, "NSWorkspace" : YES, - "NSPopover": YES + "NSPopover": YES, + "NSAppearance" : YES, + "NSVisualEffectView" : YES, }; diff --git a/bootstrap.sh b/bootstrap.sh index c66078db7..97bda59e1 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -169,7 +169,7 @@ tmp_zip="/tmp/cappuccino.zip" local_distrib="" github_user="cappuccino" -github_ref="v0.9.7-1" +github_ref="v0.9.8" noprompt="" install_capp="" diff --git a/common.jake b/common.jake index f9a7f6569..f50b85b11 100644 --- a/common.jake +++ b/common.jake @@ -378,11 +378,20 @@ global.setPackageMetadata = function(packagePath) { var pkg = JSON.parse(FILE.read(packagePath, { charset : "UTF-8" })); - var p = OS.popen(["git", "rev-parse", "--verify", "HEAD"]); - if (p.wait() === 0) { - var sha = p.stdout.read().split("\n")[0]; - if (sha.length === 40) - pkg["cappuccino-revision"] = sha; + try + { + var p = OS.popen(["git", "rev-parse", "--verify", "HEAD"]); + if (p.wait() === 0) { + var sha = p.stdout.read().split("\n")[0]; + if (sha.length === 40) + pkg["cappuccino-revision"] = sha; + } + } + finally + { + p.stdin.close(); + p.stdout.close(); + p.stderr.close(); } pkg["cappuccino-timestamp"] = new Date().getTime(); @@ -577,31 +586,6 @@ global.colorPrint = function(/* String */ message, /* String */ color) stream.print(colorize(message, color)); }; -var minUlimit = 1024; - -global.checkUlimit = function() -{ - var ulimitPath = executableExists("ulimit"); - - if (!ulimitPath) - return; - - var p = OS.popen([ulimitPath, "-n"]); - - if (p.wait() === 0) - { - var limit = p.stdout.read().split("\n")[0]; - - if (Number(limit) < minUlimit) - { - stream.print("\0red(\0bold(ERROR:\0)\0) Cappuccino may need to open more files than this terminal session currently allows (" + limit + "). Add the following line to your login configuration file (.bash_profile, .bashrc, etc.), start a new terminal session, then try again:\n"); - stream.print("ulimit -n " + minUlimit); - OS.exit(1); - } - } -} - - // built in tasks task ("build"); diff --git a/version.json b/version.json index f0c6f3ceb..719d33fc4 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "0.9.7-1" + "version": "0.9.8" } \ No newline at end of file