diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index 2d7b896ef..0f82e3e88 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@import "_CPObject+Theme.j" @import "_CPToolTip.j" @import "CALayer.j" @import "CGGeometry.j" @@ -27,6 +28,7 @@ @import "CPAlert.j" @import "CPAnimation.j" @import "CPAnimationContext.j" +@import "CPAppearance.j" @import "CPApplication.j" @import "CPArrayController.j" @import "CPBezierPath.j" @@ -102,13 +104,15 @@ @import "CPTokenField.j" @import "CPToolbar.j" @import "CPToolbarItem.j" +@import "CPTrackingArea.j" @import "CPTreeNode.j" @import "CPUserDefaultsController.j" @import "CPView.j" @import "CPViewAnimator.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/CPAlert.j b/AppKit/CPAlert.j index 2dec01211..c87c2c884 100644 --- a/AppKit/CPAlert.j +++ b/AppKit/CPAlert.j @@ -821,12 +821,12 @@ var bottomHeight = 71; else if (_modalDelegate) { if (_didEndSelector) - objj_msgSend(_modalDelegate, _didEndSelector, self, returnCode, contextInfo); + _modalDelegate.isa.objj_msgSend3(_modalDelegate, _didEndSelector, self, returnCode, contextInfo); } else if (_delegate) { if (_didEndSelector) - objj_msgSend(_delegate, _didEndSelector, self, returnCode); + _delegate.isa.objj_msgSend2(_delegate, _didEndSelector, self, returnCode); else [self _sendDelegateAlertDidEndReturnCode:returnCode]; } 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 457fe8a49..f20664030 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 @@ -974,7 +984,7 @@ var CPMainCibFile = @"CPMainCibFile", */ - (void)setTarget:(id)aTarget selector:(SEL)aSelector forNextEventMatchingMask:(unsigned int)aMask untilDate:(CPDate)anExpiration inMode:(CPString)aMode dequeue:(BOOL)shouldDequeue { - _eventListeners.splice(_eventListenerInsertionIndex++, 0, _CPEventListenerMake(aMask, function (anEvent) { objj_msgSend(aTarget, aSelector, anEvent); }, shouldDequeue)); + _eventListeners.splice(_eventListenerInsertionIndex++, 0, _CPEventListenerMake(aMask, function (anEvent) { if (aTarget != null) aTarget.isa.objj_msgSend1(aTarget, aSelector, anEvent); }, shouldDequeue)); } /*! @@ -1210,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) @@ -1332,7 +1358,7 @@ var _CPAppBootstrapperActions = nil; { var action = _CPAppBootstrapperActions.shift(); - if (objj_msgSend(self, action)) + if (self.isa.objj_msgSend0(self, action)) return; } 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/CPBox.j b/AppKit/CPBox.j index 29d0b3a08..9ab1d47d1 100644 --- a/AppKit/CPBox.j +++ b/AppKit/CPBox.j @@ -598,7 +598,8 @@ var CPBoxTypeKey = @"CPBoxTypeKey", CPBoxBorderTypeKey = @"CPBoxBorderTypeKey", CPBoxTitle = @"CPBoxTitle", CPBoxTitlePosition = @"CPBoxTitlePosition", - CPBoxTitleView = @"CPBoxTitleView"; + CPBoxTitleView = @"CPBoxTitleView", + CPBoxContentView = @"CPBoxContentView"; @implementation CPBox (CPCoding) @@ -615,7 +616,20 @@ var CPBoxTypeKey = @"CPBoxTypeKey", _titlePosition = [aCoder decodeIntForKey:CPBoxTitlePosition]; _titleView = [aCoder decodeObjectForKey:CPBoxTitleView] || [CPTextField labelWithTitle:_title]; - _contentView = [self subviews][0]; + if (_boxType != CPBoxSeparator) + { + // FIXME: we have a problem with CIB decoding here. + // We should be able to simply add : _contentView = [self subviews][0] + // but first box subview seems to be malformed (badly decoded). + // For example, when deployed, this view doesn't have its _trackingAreas array initialized. + // As a (temporary) workaround, we encode/decode the _contentView property. We then transfer the subview hierarchy + // and replace the first (and only) box subview with this _contentView + + _contentView = [aCoder decodeObjectForKey:CPBoxContentView] || [[CPView alloc] initWithFrame:[self bounds]]; + var malformedContentView = [self subviews][0]; + [_contentView setSubviews:[malformedContentView subviews]]; + [self replaceSubview:malformedContentView with:_contentView]; + } [self setAutoresizesSubviews:YES]; [_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; @@ -635,6 +649,7 @@ var CPBoxTypeKey = @"CPBoxTypeKey", [aCoder encodeObject:_title forKey:CPBoxTitle]; [aCoder encodeInt:_titlePosition forKey:CPBoxTitlePosition]; [aCoder encodeObject:_titleView forKey:CPBoxTitleView]; + [aCoder encodeObject:_contentView forKey:CPBoxContentView]; } @end diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 26c17edaa..c78d160e8 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -280,7 +280,7 @@ CPButtonImageOffset = 3.0; break; case CPOffState: - [self unsetThemeState:[CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted]]; + [self unsetThemeStates:[CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted]]; } } @@ -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..322d8c65a 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -112,6 +112,8 @@ - (void)awakeFromCib { + [super awakeFromCib]; + var view = [self superview], subview = self; @@ -270,15 +272,15 @@ currentButtonOffset += width - 1; } - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered]]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, ]]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered]]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateNormal, CPThemeStateBordered]]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateHighlighted, CPThemeStateBordered, ]]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateDisabled, CPThemeStateBordered]]; [button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered]; // FIXME shouldn't need this - [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; - [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; - [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; + [button setValue:normalColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; + [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; + [button setValue:disabledColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown]]; [self addSubview:button]; } 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/CPColor.j b/AppKit/CPColor.j index 5d27584d9..2e3d1d31a 100644 --- a/AppKit/CPColor.j +++ b/AppKit/CPColor.j @@ -25,6 +25,7 @@ @import "CGColor.j" +@import "_CPObject+Theme.j" @import "CPCompatibility.j" @import "CPImage.j" @@ -65,7 +66,8 @@ var cachedBlackColor, cachedOrangeColor, cachedPurpleColor, cachedShadowColor, - cachedClearColor; + cachedClearColor, + cachedThemeColor; /// @endcond @@ -78,7 +80,7 @@ var cachedBlackColor,

It also provides some class helper methods that returns instances of commonly used colors.

*/ -@implementation CPColor : CPObject +@implementation CPColor : CPObject { CPArray _components; @@ -86,6 +88,27 @@ var cachedBlackColor, CPString _cssString; } + +#pragma mark - +#pragma mark Theming + ++ (CPString)defaultThemeClass +{ + return "color"; +} + ++ (CPDictionary)themeAttributes +{ + return @{ + @"alternate-selected-control-color": [CPNull null], + @"secondary-selected-control-color" : [CPNull null] + }; +} + + +#pragma mark - +#pragma mark Static methods + /*! Creates a color in the RGB colorspace, with an alpha value. Each component should be between the range of 0.0 to 1.0. For @@ -436,14 +459,22 @@ var cachedBlackColor, return cachedClearColor; } ++ (CPColor)_cachedThemeColor +{ + if (!cachedThemeColor) + cachedThemeColor = [self colorWithCalibratedWhite:0.0 alpha:0.0]; + + return cachedThemeColor; +} + + (CPColor)alternateSelectedControlColor { - return [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]; + return [[self _cachedThemeColor] valueForThemeAttribute:@"alternate-selected-control-color"]; } + (CPColor)secondarySelectedControlColor { - return [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]; + return [[self _cachedThemeColor] valueForThemeAttribute:@"secondary-selected-control-color"]; } /*! @@ -489,6 +520,10 @@ var cachedBlackColor, // use it (issue #1413.) [self _initCSSStringFromComponents]; + _theme = [CPTheme defaultTheme]; + _themeState = CPThemeStateNormal; + [self _loadThemeAttributes]; + return self; } @@ -502,6 +537,10 @@ var cachedBlackColor, _components = components; [self _initCSSStringFromComponents]; + + _theme = [CPTheme defaultTheme]; + _themeState = CPThemeStateNormal; + [self _loadThemeAttributes]; } return self; @@ -528,6 +567,10 @@ var cachedBlackColor, _patternImage = anImage; _cssString = "url(\"" + [_patternImage filename] + "\")"; _components = [0.0, 0.0, 0.0, 1.0]; + + _theme = [CPTheme defaultTheme]; + _themeState = CPThemeStateNormal; + [self _loadThemeAttributes]; } return self; @@ -835,9 +878,13 @@ var CPColorComponentsKey = @"CPColorComponentsKey", - (id)initWithCoder:(CPCoder)aCoder { if ([aCoder containsValueForKey:CPColorPatternImageKey]) - return [self _initWithPatternImage:[aCoder decodeObjectForKey:CPColorPatternImageKey]]; + self = [self _initWithPatternImage:[aCoder decodeObjectForKey:CPColorPatternImageKey]]; + else + self = [self _initWithRGBA:[aCoder decodeObjectForKey:CPColorComponentsKey]]; - return [self _initWithRGBA:[aCoder decodeObjectForKey:CPColorComponentsKey]]; + [self _decodeThemeObjectsWithCoder:aCoder]; + + return self; } /*! @@ -850,6 +897,8 @@ var CPColorComponentsKey = @"CPColorComponentsKey", [aCoder encodeObject:_patternImage forKey:CPColorPatternImageKey]; else [aCoder encodeObject:_components forKey:CPColorComponentsKey]; + + [self _encodeThemeObjectsWithCoder:aCoder]; } @end diff --git a/AppKit/CPColorPanel.j b/AppKit/CPColorPanel.j index d00baa311..e8a9320eb 100644 --- a/AppKit/CPColorPanel.j +++ b/AppKit/CPColorPanel.j @@ -483,13 +483,12 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie"; ]; } - var cookieValue = eval(cookieValue), - result = []; + var cookieValue = eval(cookieValue); - for (var i = 0; i < cookieValue.length; i++) - result.push([CPColor colorWithHexString:cookieValue[i]]); - - return result; + return [cookieValue arrayByApplyingBlock:function(value) + { + return [CPColor colorWithHexString:value]; + }]; } - (CPArray)saveColorList diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 317de9d1e..61a159ed7 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -843,8 +843,9 @@ 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() { + [[CPRunLoop mainRunLoop] performBlock:function() + { // This will prevent to jump to the focused element var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin]; @@ -852,7 +853,7 @@ var CPComboBoxTextSubview = @"text", [self _restorePreviousScrollingOrigin:previousScrollingOrigin]; - }, 0); + } argument:nil order:0 modes:[CPDefaultRunLoopMode]]; #endif return NO; @@ -1141,11 +1142,9 @@ var CPComboBoxTextSubview = @"text", // Directly nuke _items, [_items removeAll] will trigger an extra call to setContent _items = []; - var values = []; - - [anArray enumerateObjectsUsingBlock:function(object) + var values = [anArray arrayByApplyingBlock:function(object) { - values.push([object description]); + return [object description]; }]; [self addItemsWithObjectValues:values]; diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index 91198dbef..26aaca67d 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -27,6 +27,7 @@ @import "CPShadow.j" @import "CPView.j" @import "CPKeyValueBinding.j" +@import "CPTrackingArea.j" @global CPApp @@ -42,13 +43,6 @@ @end -@typedef CPTextAlignment -CPLeftTextAlignment = 0; -CPRightTextAlignment = 1; -CPCenterTextAlignment = 2; -CPJustifiedTextAlignment = 3; -CPNaturalTextAlignment = 4; - @typedef CPControlSize CPRegularControlSize = 0; CPSmallControlSize = 1; @@ -126,6 +120,8 @@ var CPControlBlackColor = [CPColor blackColor]; CGPoint _previousTrackingLocation; CPControlSize _controlSize; + + CPWritingDirection _baseWritingDirection @accessors(property=baseWritingDirection); } + (CPDictionary)themeAttributes @@ -205,7 +201,6 @@ var CPControlBlackColor = [CPColor blackColor]; return self; } - #pragma mark - #pragma mark Control Size @@ -1016,6 +1011,62 @@ 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 + +@implementation CPControl (CPTrackingArea) + +- (void)updateTrackingAreas +{ + [self removeAllTrackingAreas]; + [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:self + userInfo:nil]]; +} + @end var CPControlActionKey = @"CPControlActionKey", @@ -1027,6 +1078,7 @@ var CPControlActionKey = @"CPControlActionKey", CPControlSendsActionOnEndEditingKey = @"CPControlSendsActionOnEndEditingKey", CPControlTargetKey = @"CPControlTargetKey", CPControlValueKey = @"CPControlValueKey", + CPControlBaseWrittingDirectionKey = @"CPControlBaseWrittingDirectionKey"; __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey"; @@ -1055,6 +1107,8 @@ var CPControlActionKey = @"CPControlActionKey", [self setFormatter:[aCoder decodeObjectForKey:CPControlFormatterKey]]; [self setControlSize:[aCoder decodeIntForKey:CPControlControlSizeKey]]; + + [self setBaseWritingDirection:[aCoder decodeIntForKey:CPControlBaseWrittingDirectionKey]]; } return self; @@ -1089,6 +1143,9 @@ var CPControlActionKey = @"CPControlActionKey", [aCoder encodeObject:_formatter forKey:CPControlFormatterKey]; [aCoder encodeInt:_controlSize forKey:CPControlControlSizeKey]; + + [aCoder encodeInt:_baseWritingDirection forKey:CPControlBaseWrittingDirectionKey]; + } @end diff --git a/AppKit/CPCursor.j b/AppKit/CPCursor.j index 6e0b36cff..57f3039c6 100755 --- a/AppKit/CPCursor.j +++ b/AppKit/CPCursor.j @@ -123,6 +123,9 @@ var currentCursor = nil, - (void)set { + if (currentCursor === self) + return; + currentCursor = self; #if PLATFORM(DOM) 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/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index c4ecb3866..b3140cab1 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -1114,30 +1114,30 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su" [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"font" inStates:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]]forThemeAttribute:@"text-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateSelected]]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted] forThemeAttribute:@"font" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted]; [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; - [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; [self addSubview:_textField]; 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/CPDocument.j b/AppKit/CPDocument.j index 7f0c79c28..8770d57aa 100644 --- a/AppKit/CPDocument.j +++ b/AppKit/CPDocument.j @@ -515,7 +515,9 @@ var CPDocumentUntitledCount = 0; alert("There was an error retrieving the document."); - objj_msgSend(session.delegate, session.didReadSelector, self, NO, session.contextInfo); + var theDelegate = session.delegate; + + theDelegate.isa.objj_msgSend3(theDelegate, session.didReadSelector, self, NO, session.contextInfo); } else { @@ -540,7 +542,9 @@ var CPDocumentUntitledCount = 0; _writeRequest = nil; - objj_msgSend(session.delegate, session.didSaveSelector, self, NO, session.contextInfo); + var theDelegate = session.delegate; + + theDelegate.isa.objj_msgSend3(theDelegate, session.didSaveSelector, self, NO, session.contextInfo); [self _sendDocumentSavedNotification:NO]; } } @@ -553,14 +557,15 @@ var CPDocumentUntitledCount = 0; */ - (void)connection:(CPURLConnection)aConnection didReceiveData:(CPString)aData { - var session = aConnection.session; + var session = aConnection.session, + theDelegate = session.delegate; // READ if (aConnection == _readConnection) { [self readFromData:[CPData dataWithRawString:aData] ofType:session.fileType error:nil]; - objj_msgSend(session.delegate, session.didReadSelector, self, YES, session.contextInfo); + theDelegate.isa.objj_msgSend3(theDelegate, session.didReadSelector, self, YES, session.contextInfo); } else { @@ -569,7 +574,7 @@ var CPDocumentUntitledCount = 0; _writeRequest = nil; - objj_msgSend(session.delegate, session.didSaveSelector, self, YES, session.contextInfo); + theDelegate.isa.objj_msgSend3(theDelegate, session.didSaveSelector, self, YES, session.contextInfo); [self _sendDocumentSavedNotification:YES]; } } @@ -580,10 +585,11 @@ var CPDocumentUntitledCount = 0; */ - (void)connection:(CPURLConnection)aConnection didFailWithError:(CPError)anError { - var session = aConnection.session; + var session = aConnection.session, + theDelegate = session.delegate; if (_readConnection == aConnection) - objj_msgSend(session.delegate, session.didReadSelector, self, NO, session.contextInfo); + theDelegate.isa.objj_msgSend3(theDelegate, session.didReadSelector, self, NO, session.contextInfo); else { @@ -597,7 +603,7 @@ var CPDocumentUntitledCount = 0; alert("There was an error saving the document."); - objj_msgSend(session.delegate, session.didSaveSelector, self, NO, session.contextInfo); + theDelegate.isa.objj_msgSend3(theDelegate, session.didSaveSelector, self, NO, session.contextInfo); [self _sendDocumentSavedNotification:NO]; } } @@ -858,21 +864,24 @@ var CPDocumentUntitledCount = 0; [self canCloseDocumentWithDelegate:self shouldCloseSelector:@selector(_document:shouldClose:context:) contextInfo:{delegate:delegate, selector:selector, context:info}]; else if ([delegate respondsToSelector:selector]) - objj_msgSend(delegate, selector, self, YES, info); + delegate.isa.objj_msgSend3(delegate, selector, self, YES, info); } - (void)_document:(CPDocument)aDocument shouldClose:(BOOL)shouldClose context:(Object)context { + var theDelegate = context.delegate; + if (aDocument === self && shouldClose) [self close]; - objj_msgSend(context.delegate, context.selector, aDocument, shouldClose, context.context); + if (theDelegate != null) + theDelegate.isa.objj_msgSend3(theDelegate, context.selector, aDocument, shouldClose, context.context); } - (void)canCloseDocumentWithDelegate:(id)aDelegate shouldCloseSelector:(SEL)aSelector contextInfo:(Object)context { if (![self isDocumentEdited]) - return [aDelegate respondsToSelector:aSelector] && objj_msgSend(aDelegate, aSelector, self, YES, context); + return [aDelegate respondsToSelector:aSelector] && aDelegate.isa.objj_msgSend3(aDelegate, aSelector, self, YES, context); _canCloseAlert = [[CPAlert alloc] init]; @@ -901,8 +910,8 @@ var CPDocumentUntitledCount = 0; if (returnCode === 0) [self saveDocumentWithDelegate:delegate didSaveSelector:selector contextInfo:context]; - else - objj_msgSend(delegate, selector, self, returnCode === 2, context); + else if (delegate != null) + delegate.isa.objj_msgSend3(delegate, selector, self, returnCode === 2, context); _canCloseAlert = nil; } diff --git a/AppKit/CPDocumentController.j b/AppKit/CPDocumentController.j index 5551dd6f1..b851b046a 100644 --- a/AppKit/CPDocumentController.j +++ b/AppKit/CPDocumentController.j @@ -402,8 +402,10 @@ var CPSharedDocumentController = nil; } } - if ([context.delegate respondsToSelector:context.selector]) - objj_msgSend(context.delegate, context.selector, self, [[self documents] count] === 0, context.context); + var theDelegate = context.delegate; + + if ([theDelegate respondsToSelector:context.selector]) + theDelegate.isa.objj_msgSend3(theDelegate, context.selector, self, [[self documents] count] === 0, context.context); } @end diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index 1189ad962..66837649d 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -29,6 +29,7 @@ @import "CPCompatibility.j" @import "CGGeometry.j" @import "CPText.j" +@import "CPTrackingArea.j" @class CPTextField @class CPWindow @@ -82,6 +83,8 @@ var _CPEventPeriodicEventPeriod = 0, BOOL _suppressCappuccinoCut; BOOL _suppressCappuccinoPaste; #endif + + CPTrackingArea _trackingArea; } /*! @@ -141,6 +144,27 @@ var _CPEventPeriodicEventPeriod = 0, timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber clickCount:aClickCount pressure:aPressure]; } +/*! + Creates a new mouse tracking event. + + @param anEventType the event type + @param aPoint the location of the cursor in the window specified by \c aWindowNumber + @param modifierFlags a bitwise combination of the modifiers specified in the CPEvent globals + @param aTimestamp the time the event occurred + @param aWindowNumber the number of the CPWindow where the event occurred + @param aGraphicsContext the graphics context where the event occurred + @param anEventNumber a number for this event + @param aTrackingArea the tracking area that triggered the event + @throws CPInternalInconsistencyException if an invalid event type is provided + @return the new mouse event + */ ++ (id)enterExitEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags + timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext + eventNumber:(int)anEventNumber trackingArea:(CPTrackingArea)aTrackingArea +{ + return [[self alloc] _initEnterExitEventWithType:anEventType location:aPoint modifierFlags:modifierFlags timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber trackingArea:aTrackingArea]; +} + /*! Creates a new custom event. @@ -201,6 +225,28 @@ var _CPEventPeriodicEventPeriod = 0, return self; } +/* @ignore */ +- (id)_initEnterExitEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags + timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext + eventNumber:(int)anEventNumber trackingArea:(CPTrackingArea)aTrackingArea +{ + if ((anEventType != CPMouseEntered) && (anEventType != CPMouseExited) && (anEventType != CPCursorUpdate)) + [CPException raise:CPInternalInconsistencyException reason:"Invalid event type"]; + + if (self = [self _initWithType:anEventType]) + { + _location = CGPointCreateCopy(aPoint); + _modifierFlags = modifierFlags; + _timestamp = aTimestamp; + _context = aGraphicsContext; + _eventNumber = anEventNumber; + _trackingArea = aTrackingArea; + _window = [CPApp windowWithWindowNumber:aWindowNumber]; + } + + return self; +} + /* @ignore */ - (id)_initKeyEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned int)modifierFlags timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext @@ -583,6 +629,14 @@ var _CPEventPeriodicEventPeriod = 0, } } +- (CPTrackingArea)trackingArea +{ + if ((_type !== CPMouseEntered) && (_type !== CPMouseExited) && (_type !== CPCursorUpdate)) + [CPException raise:CPInternalInconsistencyException format:@"You can't call trackingArea for events of type %#x", _type] + + return _trackingArea; +} + @end function _CPEventFirePeriodEvent() diff --git a/AppKit/CPGradient.j b/AppKit/CPGradient.j index dfa7a3437..93b08b2d2 100644 --- a/AppKit/CPGradient.j +++ b/AppKit/CPGradient.j @@ -70,11 +70,12 @@ CPGradientDrawsAfterEndingLocation = kCGGradientDrawsAfterEndLocation; { if (self = [super init]) { - var cgColors = [], - count = [someColors count], - colorSpace = [aColorSpace CGColorSpace] || CGColorSpaceCreateDeviceRGB; - for (var i = 0; i < count; i++) - cgColors.push(CGColorCreate(colorSpace, [someColors[i] components])); + var colorSpace = [aColorSpace CGColorSpace] || CGColorSpaceCreateDeviceRGB, + cgColors = [someColors arrayByApplyingBlock:function(color) + { + return CGColorCreate(colorSpace, [color components]) + }]; + _gradient = CGGradientCreateWithColors(colorSpace, cgColors, someLocations); } diff --git a/AppKit/CPGraphics.j b/AppKit/CPGraphics.j index 380bea393..55dbb9f73 100644 --- a/AppKit/CPGraphics.j +++ b/AppKit/CPGraphics.j @@ -43,10 +43,10 @@ function CPDrawTiledRects( if (sides.length != grays.length) [CPException raise:CPInvalidArgumentException reason:@"sides (length: " + sides.length + ") and grays (length: " + grays.length + ") must have the same length."]; - var colors = []; - - for (var i = 0; i < grays.length; ++i) - colors.push([CPColor colorWithCalibratedWhite:grays[i] alpha:1.0]); + var colors = [grays arrayByApplyingBlock:function(gray) + { + return [CPColor colorWithCalibratedWhite:gray alpha:1.0]; + }]; return CPDrawColorTiledRects(boundsRect, clipRect, sides, colors); } diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index 674bb1d04..e735673a4 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -275,7 +275,7 @@ function CPAppKitImage(aFilename, aSize) */ - (CGSize)size { - return _size; + return CGSizeMakeCopy(_size); } + (id)imageNamed:(CPString)aName diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j index 6cac9a80e..addc031b9 100644 --- a/AppKit/CPObjectController.j +++ b/AppKit/CPObjectController.j @@ -27,6 +27,9 @@ @import "CPController.j" @import "CPKeyValueBinding.j" +@class _CPManagedProxy +@class CPPredicate; + /*! @class @@ -47,6 +50,9 @@ BOOL _isEditable; BOOL _automaticallyPreparesContent; + BOOL _usesLazyFetching @accessors(getter=usesLazyFetching, setter=setUsesLazyFetching:); + BOOL _isUsingManagedProxy; + _CPManagedProxy _managedProxy; CPCountedSet _observedKeys; } @@ -179,6 +185,46 @@ return _automaticallyPreparesContent; } +/*! + Sets the entity name the controller handles. + + @param CPString newEntityName - The new entity name. +*/ +- (void)setEntityName:(CPString)newEntityName +{ + [_managedProxy setEntityName:newEntityName]; +} + +/*! + Returns the entity name. + + @return CPString - The name of the entity. +*/ +- (CPString)entityName +{ + return [_managedProxy entityName]; +} + +/*! + Sets the predicate used to fetch content. + + @param CPPredicate newPredicate - The fetch predicate. +*/ +- (void)setFetchPredicate:(CPPredicate)newPredicate +{ + [_managedProxy setFetchPredicate:newPredicate]; +} + +/*! + Returns the fetch predicate. + + @return CPPredicate - The predicate used to fetch content. +*/ +- (CPPredicate)fetchPredicate +{ + return [_managedProxy fetchPredicate]; +} + /*! Overridden by a subclass that require control over the creation of new objects. */ @@ -189,6 +235,7 @@ /*! Sets the object class when creating new objects. + @param Class - the class of new objects that will be created. */ - (void)setObjectClass:(Class)aClass @@ -363,7 +410,10 @@ var CPObjectControllerContentKey = @"CPObjectControllerContentKey", CPObjectControllerObjectClassNameKey = @"CPObjectControllerObjectClassNameKey", CPObjectControllerIsEditableKey = @"CPObjectControllerIsEditableKey", - CPObjectControllerAutomaticallyPreparesContentKey = @"CPObjectControllerAutomaticallyPreparesContentKey"; + CPObjectControllerAutomaticallyPreparesContentKey = @"CPObjectControllerAutomaticallyPreparesContentKey", + CPObjectControllerUsesLazyFetchingKey = @"CPObjectControllerUsesLazyFetchingKey", + CPObjectControllerIsUsingManagedProxyKey = @"CPObjectControllerIsUsingManagedProxyKey", + CPObjectControllerManagedProxyKey = @"CPObjectControllerManagedProxyKey"; @implementation CPObjectController (CPCoding) @@ -374,12 +424,18 @@ var CPObjectControllerContentKey = @"CPObjectControllerCo if (self) { var objectClassName = [aCoder decodeObjectForKey:CPObjectControllerObjectClassNameKey], - objectClass = CPClassFromString(objectClassName); + objectClass = CPClassFromString(objectClassName), + content = [aCoder decodeObjectForKey:CPObjectControllerContentKey]; [self setObjectClass:objectClass || [CPMutableDictionary class]]; [self setEditable:[aCoder decodeBoolForKey:CPObjectControllerIsEditableKey]]; [self setAutomaticallyPreparesContent:[aCoder decodeBoolForKey:CPObjectControllerAutomaticallyPreparesContentKey]]; - [self setContent:[aCoder decodeObjectForKey:CPObjectControllerContentKey]]; + [self setUsesLazyFetching:[aCoder decodeBoolForKey:CPObjectControllerUsesLazyFetchingKey]]; + _isUsingManagedProxy = [aCoder decodeBoolForKey:CPObjectControllerIsUsingManagedProxyKey]; + _managedProxy = [aCoder decodeObjectForKey:CPObjectControllerManagedProxyKey]; + + if (content != nil) + [self setContent:content]; _observedKeys = [[CPCountedSet alloc] init]; } @@ -398,6 +454,11 @@ var CPObjectControllerContentKey = @"CPObjectControllerCo [aCoder encodeBool:[self isEditable] forKey:CPObjectControllerIsEditableKey]; [aCoder encodeBool:[self automaticallyPreparesContent] forKey:CPObjectControllerAutomaticallyPreparesContentKey]; + [aCoder encodeBool:[self usesLazyFetching] forKey:CPObjectControllerUsesLazyFetchingKey]; + [aCoder encodeBool:_isUsingManagedProxy forKey:CPObjectControllerIsUsingManagedProxyKey]; + + if (_managedProxy) + [aCoder encodeObject:_managedProxy forKey:CPObjectControllerManagedProxyKey]; } - (void)awakeFromCib @@ -825,3 +886,38 @@ var CPObjectControllerContentKey = @"CPObjectControllerCo } @end + + +@implementation _CPManagedProxy : CPObject +{ + CPString _entityName @accessors(getter=entityName, setter=setEntityName:); + CPPredicate _fetchPredicate @accessors(getter=fetchPredicate, setter=setFetchPredicate:); +} + +@end + +var CPManagedProxyEntityNameKey = @"CPManagedProxyEntityNameKey", + CPManagedProxyFetchPredicateKey = @"CPManagedProxyFetchPredicateKey"; + +@implementation _CPManagedProxy (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super init]; + + if (self) + { + [self setEntityName:[aCoder decodeObjectForKey:CPManagedProxyEntityNameKey]]; + [self setFetchPredicate:[aCoder decodeObjectForKey:CPManagedProxyFetchPredicateKey]]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:[self entityName] forKey:CPManagedProxyEntityNameKey]; + [aCoder encodeObject:[self fetchPredicate] forKey:CPManagedProxyFetchPredicateKey]; +} + +@end \ No newline at end of file diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 6dc83fa0c..eeec78938 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -1417,7 +1417,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0, if (_dropItem) { [_dropOperationFeedbackView blink]; - [CPTimer scheduledTimerWithTimeInterval:.3 callback:objj_msgSend(self, "expandItem:", _dropItem) repeats:NO]; + [CPTimer scheduledTimerWithTimeInterval:.3 callback:[self expandItem:_dropItem] repeats:NO]; } }; diff --git a/AppKit/CPPanel.j b/AppKit/CPPanel.j index 89a8f0355..c6292c475 100644 --- a/AppKit/CPPanel.j +++ b/AppKit/CPPanel.j @@ -22,10 +22,13 @@ @import "CPWindow.j" +@global CPApp CPOKButton = 1; CPCancelButton = 0; +CPDocModalWindowMask = 1 << 6; + /*! @ingroup appkit @class CPPanel @@ -51,8 +54,6 @@ CPCancelButton = 0; @global @class CPWindow */ -CPDocModalWindowMask = 1 << 6; - @implementation CPPanel : CPWindow { BOOL _becomesKeyOnlyIfNeeded; diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index 09aecb6fe..6eecf9420 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -361,15 +361,10 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down"); */ - (CPArray)itemTitles { - var titles = [], - items = [self itemArray], - index = 0, - count = [items count]; - - for (; index < count; ++index) - titles.push([items[index] title]); - - return titles; + return [[self itemArray] arrayByApplyingBlock:function(item) + { + return [item title]; + }]; } /*! 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 5b40fa8ed..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; diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j index eddf8b628..eb1bc841c 100644 --- a/AppKit/CPResponder.j +++ b/AppKit/CPResponder.j @@ -24,6 +24,7 @@ @import @import "CPEvent.j" +@import "CPCursor.j" @class CPKeyBinding @class CPMenu @@ -200,6 +201,18 @@ CPDeleteForwardKeyCode = 46; [_nextResponder performSelector:_cmd withObject:anEvent]; } +/*! + Notifies the receiver that the mouse entered the receiver's area and that it can adapt the cursor. + @param anEvent contains information about the exit + */ +- (void)cursorUpdate:(CPEvent)anEvent +{ + if (_nextResponder) + [_nextResponder performSelector:_cmd withObject:anEvent]; + else + [[CPCursor arrowCursor] set]; +} + /*! Notifies the receiver that the mouse scroll wheel has moved. @param anEvent information about the scroll diff --git a/AppKit/CPRuleEditor/CPRuleEditor.j b/AppKit/CPRuleEditor/CPRuleEditor.j index 404c5546e..141e06d63 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor.j +++ b/AppKit/CPRuleEditor/CPRuleEditor.j @@ -2121,7 +2121,7 @@ TODO: implement return; var point = [self convertPoint:[event locationInWindow] fromView:nil], - view = [_slices objectAtIndex:FLOOR(point.y / _sliceHeight)]; + view = [_slices objectAtIndex:FLOOR(MAX(0, point.y) / _sliceHeight)]; if ([self _dragShouldBeginFromMouseDown:view]) [self _performDragForSlice:view withEvent:event]; 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/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index f9d6a2ef9..2ef546f5e 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -115,8 +115,7 @@ CPSegmentSwitchTrackingMomentary = 2; /*! @ignore */ - (void)setSegments:(CPArray)segments { - [_segments removeAllObjects]; - [_themeStates removeAllObjects]; + [self removeSegmentsAtIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self segmentCount])]]; [self insertSegments:segments atIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [segments count])]]; } @@ -135,6 +134,9 @@ CPSegmentSwitchTrackingMomentary = 2; [_segments insertObjects:segments atIndexes:indices]; [_themeStates insertObjects:newStates atIndexes:indices]; + + if (_selectedSegment >= [indices firstIndex]) + _selectedSegment += [indices count]; } /*! @ignore */ @@ -143,6 +145,16 @@ CPSegmentSwitchTrackingMomentary = 2; if ([indices count] == 0) return; + [indices enumerateIndexesUsingBlock:function(idx, stop) + { + [[_segments objectAtIndex:idx] setSelected:NO]; + }]; + + if ([indices containsIndex:_selectedSegment]) + _selectedSegment = -1; + else if ([indices lastIndex] < _selectedSegment) + _selectedSegment -= [indices count]; + [_segments removeObjectsAtIndexes:indices]; [_themeStates removeObjectsAtIndexes:indices]; } diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j index e10c67e8d..0bd1043ed 100644 --- a/AppKit/CPSplitView.j +++ b/AppKit/CPSplitView.j @@ -26,6 +26,7 @@ @import "CPImage.j" @import "CPView.j" @import "CPCursor.j" +@import "CPTrackingArea.j" @class CPUserDefaults @global CPApp @@ -562,26 +563,6 @@ var ShouldSuppressResizeNotifications = 1, //[[self window] setAcceptsMouseMovedEvents:YES]; } -- (void)mouseEntered:(CPEvent)anEvent -{ - // Tracking code handles cursor by itself. - if (_currentDivider == CPNotFound) - [self _updateResizeCursor:anEvent]; -} - -- (void)mouseMoved:(CPEvent)anEvent -{ - if (_currentDivider == CPNotFound) - [self _updateResizeCursor:anEvent]; -} - -- (void)mouseExited:(CPEvent)anEvent -{ - if (_currentDivider == CPNotFound) - // FIXME: we should use CPCursor push/pop (if previous currentCursor != arrow). - [[CPCursor arrowCursor] set]; -} - - (void)_updateResizeCursor:(CPEvent)anEvent { var point = [self convertPoint:[anEvent locationInWindow] fromView:nil]; @@ -1205,6 +1186,29 @@ The sum of the views and the sum of the dividers should be equal to the size of @end +@implementation CPSplitView (CPTrackingArea) + +- (void)updateTrackingAreas +{ + [self removeAllTrackingAreas]; + + var options = CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow; + + for (var i = 0; i < _subviews.length - 1; i++) + [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:[self effectiveRectOfDividerAtIndex:i] + options:options + owner:self + userInfo:nil]]; +} + +- (void)cursorUpdate:(CPEvent)anEvent +{ + if (_currentDivider === CPNotFound) + [self _updateResizeCursor:anEvent]; +} + +@end + @implementation CPSplitView (CPSplitViewDelegate) @@ -1376,6 +1380,8 @@ The sum of the views and the sum of the dividers should be equal to the size of [_delegate splitViewDidResizeSubviews:[[CPNotification alloc] initWithName:CPSplitViewDidResizeSubviewsNotification object:self userInfo:userInfo]]; [[CPNotificationCenter defaultCenter] postNotificationName:CPSplitViewDidResizeSubviewsNotification object:self userInfo:userInfo]; + + [self updateTrackingAreas]; } @end diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j index 3436d062f..42442ea04 100644 --- a/AppKit/CPStepper.j +++ b/AppKit/CPStepper.j @@ -188,12 +188,12 @@ [_buttonUp setFrame:upFrame]; [_buttonDown setFrame:downFrame]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]]; - [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]]; - [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inStates:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateDisabled]]; + [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateHighlighted]]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inStates:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateDisabled]]; + [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateHighlighted]]; } - (void)_sizeToFit diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index ec145d802..822619650 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -34,6 +34,8 @@ CPNoTabsBezelBorder = 4; //Displays no tabs and has a bezeled border. CPNoTabsLineBorder = 5; //Has no tabs and displays a line border. CPNoTabsNoBorder = 6; //Displays no tabs and no border. +@class _CPTabViewBox + var CPTabViewDidSelectTabViewItemSelector = 1 << 1, CPTabViewShouldSelectTabViewItemSelector = 1 << 2, CPTabViewWillSelectTabViewItemSelector = 1 << 3, @@ -64,9 +66,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, CPArray _items; CPSegmentedControl _tabs; - CPBox _box; + _CPTabViewBox _box; + CPView _placeHolderView; - CPNumber _selectedIndex; + CPTabViewItem _selectedTabViewItem; CPTabViewType _type; CPFont _font; @@ -79,9 +82,8 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, { if (self = [super initWithFrame:aFrame]) { - _items = [CPArray array]; - [self _init]; + _selectedTabViewItem = nil; [self setTabViewType:CPTopTabsBezelBorder]; } @@ -90,19 +92,26 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, - (void)_init { - _selectedIndex = CPNotFound; - - _tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; + _tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMakeZero()]; [_tabs setHitTests:NO]; + [_tabs setSegments:[CPArray array]]; var height = [_tabs valueForThemeAttribute:@"min-size"].height; [_tabs setFrameSize:CGSizeMake(0, height)]; - _box = [[CPBox alloc] initWithFrame:[self bounds]]; + _box = [[_CPTabViewBox alloc] initWithFrame:[self bounds]]; + [_box setTabView:self]; [self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]]; [self addSubview:_box]; [self addSubview:_tabs]; + + _placeHolderView = nil; +} + +- (CPArray)items +{ + return [_tabs segments]; } // Adding and Removing Tabs @@ -112,7 +121,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (void)addTabViewItem:(CPTabViewItem)aTabViewItem { - [self insertTabViewItem:aTabViewItem atIndex:[_items count]]; + [self insertTabViewItem:aTabViewItem atIndex:[self numberOfTabViewItems]]; } /*! @@ -122,15 +131,18 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPUInteger)anIndex { - [_items insertObject:aTabViewItem atIndex:anIndex]; + [self _insertTabViewItems:[aTabViewItem] atIndexes:[CPIndexSet indexSetWithIndex:anIndex]]; +} - [self _updateItems]; - [self _repositionTabs]; +- (void)_insertTabViewItems:(CPArray)tabViewItems atIndexes:(CPIndexSet)indexes +{ + [_tabs insertSegments:tabViewItems atIndexes:indexes]; + [tabViewItems makeObjectsPerformSelector:@selector(_setTabView:) withObject:self]; - [aTabViewItem _setTabView:self]; + [self tileWithChangedItem:[tabViewItems firstObject]]; + [self _reverseSetContent]; - if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) - [_delegate tabViewDidChangeNumberOfTabViewItems:self]; + [self _sendDelegateTabViewDidChangeNumberOfTabViewItems]; } /*! @@ -139,23 +151,39 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (void)removeTabViewItem:(CPTabViewItem)aTabViewItem { - var count = [_items count]; - for (var i = 0; i < count; i++) - { - if ([_items objectAtIndex:i] === aTabViewItem) - { - [_items removeObjectAtIndex:i]; - break; - } - } + var idx = [[self items] indexOfObjectIdenticalTo:aTabViewItem]; - [self _updateItems]; - [self _repositionTabs]; + if (idx == CPNotFound) + return; + [_tabs removeSegmentsAtIndexes:[CPIndexSet indexSetWithIndex:idx]]; [aTabViewItem _setTabView:nil]; - if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) - [_delegate tabViewDidChangeNumberOfTabViewItems:self]; + [self tileWithChangedItem:nil]; + [self _didRemoveTabViewItem:aTabViewItem atIndex:idx]; + [self _reverseSetContent]; + + [self _sendDelegateTabViewDidChangeNumberOfTabViewItems]; +} + +- (void)_didRemoveTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPInteger)idx +{ + // If the selection is managed by bindings, let the binder do that. + if ([self binderForBinding:CPSelectionIndexesBinding] || [self binderForBinding:CPSelectedIndexBinding]) + return; + + if (_selectedTabViewItem == aTabViewItem) + { + var didSelect = NO; + + if (idx > 0) + didSelect = [self selectTabViewItemAtIndex:idx - 1]; + else if ([self numberOfTabViewItems] > 0) + didSelect = [self selectTabViewItemAtIndex:0]; + + if (didSelect == NO) + _selectedTabViewItem == nil; + } } // Accessing Tabs @@ -166,7 +194,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem { - return [_items indexOfObjectIdenticalTo:aTabViewItem]; + return [[self items] indexOfObjectIdenticalTo:aTabViewItem]; } /*! @@ -176,11 +204,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier { - for (var index = [_items count]; index >= 0; index--) - if ([[_items[index] identifier] isEqual:anIdentifier]) - return index; - - return CPNotFound; + return [[self items] indexOfObjectPassingTest:function(item, idx, stop) + { + return [[item identifier] isEqual:anIdentifier]; + }]; } /*! @@ -189,7 +216,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (unsigned)numberOfTabViewItems { - return [_items count]; + return [[self items] count]; } /*! @@ -198,7 +225,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (CPTabViewItem)tabViewItemAtIndex:(CPUInteger)anIndex { - return [_items objectAtIndex:anIndex]; + return [[self items] objectAtIndex:anIndex]; } /*! @@ -207,7 +234,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (CPArray)tabViewItems { - return [_items copy]; // Copy? + return [[self items] copy]; // Copy? } // Selecting a Tab @@ -217,7 +244,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (void)selectFirstTabViewItem:(id)aSender { - if ([_items count] === 0) + if ([self numberOfTabViewItems] === 0) return; // throw? [self selectTabViewItemAtIndex:0]; @@ -229,10 +256,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (void)selectLastTabViewItem:(id)aSender { - if ([_items count] === 0) + if ([self numberOfTabViewItems] === 0) return; // throw? - [self selectTabViewItemAtIndex:[_items count] - 1]; + [self selectTabViewItemAtIndex:[self numberOfTabViewItems] - 1]; } /*! @@ -241,12 +268,12 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (void)selectNextTabViewItem:(id)aSender { - if (_selectedIndex === CPNotFound) + if (_selectedTabViewItem === nil) return; - var nextIndex = _selectedIndex + 1; + var nextIndex = [self indexOfTabViewItem:_selectedTabViewItem] + 1; - if (nextIndex === [_items count]) + if (nextIndex === [self numberOfTabViewItems]) // does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:) return; @@ -259,10 +286,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (void)selectPreviousTabViewItem:(id)aSender { - if (_selectedIndex === CPNotFound) + if (_selectedTabViewItem === nil) return; - var previousIndex = _selectedIndex - 1; + var previousIndex = [self indexOfTabViewItem:_selectedTabViewItem] - 1; if (previousIndex < 0) return; // does nothing. See above. @@ -285,22 +312,32 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (BOOL)selectTabViewItemAtIndex:(CPUInteger)anIndex { - if (anIndex === _selectedIndex) - return; - - var aTabViewItem = [self tabViewItemAtIndex:anIndex]; - - if ((_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![_delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) + if (![self _selectTabViewItemAtIndex:anIndex]) return NO; - if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector) - [_delegate tabView:self willSelectTabViewItem:aTabViewItem]; + [self _reverseSetSelectedIndex]; - [_tabs selectSegmentWithTag:anIndex]; - [self _setSelectedIndex:anIndex]; + return YES; +} - if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector) - [_delegate tabView:self didSelectTabViewItem:aTabViewItem]; +// Like selectTabViewItemAtIndex: but without bindings interaction +- (BOOL)_selectTabViewItemAtIndex:(CPUInteger)anIndex +{ + var aTabViewItem = [self tabViewItemAtIndex:anIndex]; + + if (aTabViewItem == _selectedTabViewItem) + return NO; + + if (![self _sendDelegateShouldSelectTabViewItem:aTabViewItem]) + return NO; + + [self _sendDelegateWillSelectTabViewItem:aTabViewItem]; + + [_tabs setSelectedSegment:anIndex]; + _selectedTabViewItem = aTabViewItem; + [self _displayItemView:[aTabViewItem view]]; + + [self _sendDelegateDidSelectTabViewItem:aTabViewItem]; return YES; } @@ -311,10 +348,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, */ - (CPTabViewItem)selectedTabViewItem { - if (_selectedIndex != CPNotFound) - return [_items objectAtIndex:_selectedIndex]; - - return nil; + return _selectedTabViewItem; } // Modifying the font @@ -375,6 +409,14 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, [self setNeedsLayout]; } +- (void)tileWithChangedItem:(CPTabViewItem)aTabViewItem +{ + var segment = aTabViewItem ? [self indexOfTabViewItem:aTabViewItem] : 0; + [_tabs tileWithChangedSegment:segment]; + + [self setNeedsLayout]; +} + - (void)layoutSubviews { // Even if CPTabView's autoresizesSubviews is NO, _tabs and _box has to be laid out. @@ -392,7 +434,6 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, [_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame), CGRectGetHeight(aFrame) - segmentedHeight / 2)]; - [self _updateItems]; [self _repositionTabs]; } } @@ -470,30 +511,238 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1, [_tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; } -- (void)_setSelectedIndex:(CPNumber)index +- (void)_displayItemView:(CPView)aView { - _selectedIndex = index; - [self _setContentViewFromItem:[_items objectAtIndex:_selectedIndex]]; + [_box setContentView:aView]; } -- (void)_setContentViewFromItem:(CPTabViewItem)anItem +// DELEGATE METHODS + +- (BOOL)_sendDelegateShouldSelectTabViewItem:(CPTabViewItem)aTabViewItem { - [_box setContentView:[anItem view]]; + if (_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) + return [_delegate tabView:self shouldSelectTabViewItem:aTabViewItem]; + + return YES; } -- (void)_updateItems +- (void)_sendDelegateWillSelectTabViewItem:(CPTabViewItem)aTabViewItem { - var count = [_items count]; - [_tabs setSegmentCount:count]; + if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector) + [_delegate tabView:self willSelectTabViewItem:aTabViewItem]; +} - for (var i = 0; i < count; i++) +- (void)_sendDelegateDidSelectTabViewItem:(CPTabViewItem)aTabViewItem +{ + if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector) + [_delegate tabView:self didSelectTabViewItem:aTabViewItem]; +} + +- (void)_sendDelegateTabViewDidChangeNumberOfTabViewItems +{ + if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) + [_delegate tabViewDidChangeNumberOfTabViewItems:self]; +} + +@end + +@implementation CPTabView (BindingSupport) + ++ (Class)_binderClassForBinding:(CPString)aBinding +{ + if (aBinding == CPContentBinding) + return [_CPTabViewContentBinder class]; + else if (aBinding == CPSelectionIndexesBinding || aBinding == CPSelectedIndexBinding) + return [_CPTabViewSelectionBinder class]; + + return [super _binderClassForBinding:aBinding]; +} + ++ (BOOL)isBindingExclusive:(CPString)aBinding +{ + return (aBinding == CPSelectionIndexesBinding || aBinding == CPSelectedIndexBinding); +} + +- (void)_reverseSetContent +{ + var theBinder = [self binderForBinding:CPContentBinding]; + [theBinder reverseSetValueFor:@"items"]; +} + +- (void)_reverseSetSelectedIndex +{ + var theBinder = [self binderForBinding:CPSelectionIndexesBinding]; + + if (theBinder !== nil) + [theBinder reverseSetValueFor:@"selectionIndexes"]; + else { - [_tabs setLabel:[[_items objectAtIndex:i] label] forSegment:i]; - [_tabs setTag:i forSegment:i]; + theBinder = [self binderForBinding:CPSelectedIndexBinding]; + [theBinder reverseSetValueFor:@"selectedIndex"]; + } +} + +- (CPBinder)binderForBinding:(CPString)aBinding +{ + var cls = [[self class] _binderClassForBinding:aBinding] + return [cls getBinding:aBinding forObject:self]; +} + +- (void)setItems:(CPArray)tabViewItems +{ + if ([tabViewItems isEqualToArray:[_tabs segments]]) + return; + + [[self items] makeObjectsPerformSelector:@selector(_setTabView:) withObject:nil]; + [_tabs setSegments:tabViewItems]; + [tabViewItems makeObjectsPerformSelector:@selector(_setTabView:) withObject:self]; + + [self tileWithChangedItem:nil]; + + // Update the selection because setSegments: did remove all previous segments AND the selection. + [_tabs setSelectedSegment:[self indexOfTabViewItem:_selectedTabViewItem]]; + + // should we send delegate methods in bindings mode ? + //[self _delegateTabViewDidChangeNumberOfTabViewItems:self]; +} + +- (void)_deselectAll +{ + [_tabs setSelectedSegment:-1]; + _selectedTabViewItem = nil; +} + +- (void)_displayPlaceholder:(CPString)aPlaceholder +{ + if (_placeHolderView == nil) + { + _placeHolderView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + var textField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; + [textField setTag:1000]; + [textField setTextColor:[CPColor whiteColor]]; + [textField setFont:[CPFont boldFontWithName:@"Geneva" size:18 italic:YES]]; + [_placeHolderView addSubview:textField]; } - if (_selectedIndex === CPNotFound) - [self selectFirstTabViewItem:self]; + var textField = [_placeHolderView viewWithTag:1000]; + [textField setStringValue:aPlaceholder]; + [textField sizeToFit]; + + var boxBounds = [_box bounds], + textFieldBounds = [textField bounds], + origin = CGPointMake(CGRectGetWidth(boxBounds)/2 - CGRectGetWidth(textFieldBounds)/2, CGRectGetHeight(boxBounds)/2 - CGRectGetHeight(textFieldBounds)); + + [textField setFrameOrigin:origin]; + + [self _displayItemView:_placeHolderView]; +} + +#pragma mark - +#pragma mark Override + +/*! + Enabled controls accept first mouse by default. +*/ +- (BOOL)acceptsFirstMouse:(CPEvent)anEvent +{ + return YES; +} + +@end + +var _CPTabViewContentBinderNull = @"NO CONTENT"; + +@implementation _CPTabViewContentBinder : CPBinder +{ +} + +- (void)_updatePlaceholdersWithOptions:(CPDictionary)options +{ + [super _updatePlaceholdersWithOptions:options]; + [self _setPlaceholder:_CPTabViewContentBinderNull forMarker:CPNullMarker isDefault:YES]; +} + +- (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding +{ + [_source setItems:@[]]; + [_source _setPlaceholderView:aValue]; +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + [_source setItems:aValue]; +} + +- (id)valueForBinding:(CPString)aBinding +{ + return [_source items]; +} + +@end + +var _CPTabViewSelectionBinderMultipleValues = @"Multiple Selection", + _CPTabViewSelectionBinderNoSelection = @"No Selection"; + +@implementation _CPTabViewSelectionBinder : CPBinder +{ +} + +- (void)_updatePlaceholdersWithOptions:(CPDictionary)options +{ + [super _updatePlaceholdersWithOptions:options]; + + [self _setPlaceholder:_CPTabViewSelectionBinderMultipleValues forMarker:CPMultipleValuesMarker isDefault:YES]; + [self _setPlaceholder:_CPTabViewSelectionBinderNoSelection forMarker:CPNoSelectionMarker isDefault:YES]; +} + +- (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding +{ + if (aMarker == CPNoSelectionMarker || aMarker == CPNullMarker) + [_source _deselectAll]; + + [_source _displayPlaceholder:aValue]; +} + +- (void)setValue:(id)aValue forBinding:(CPString)aBinding +{ + if (aBinding == CPSelectionIndexesBinding) + { + if (aValue == nil || [aValue count] == 0) + { + [_source _deselectAll]; + [_source _displayPlaceholder:_CPTabViewSelectionBinderNoSelection]; + } + else if ([aValue count] > 1) + [_source _displayPlaceholder:_CPTabViewSelectionBinderMultipleValues]; + else if ([aValue firstIndex] < [_source numberOfTabViewItems]) + [_source _selectTabViewItemAtIndex:[aValue firstIndex]]; + } + else if (aBinding == CPSelectedIndexBinding) + { + if (aValue == CPNotFound) + { + [_source _deselectAll]; + [_source _displayPlaceholder:_CPTabViewSelectionBinderNoSelection]; + } + else if (aValue < [_source numberOfTabViewItems]) + [_source _selectTabViewItemAtIndex:aValue]; + } +} + +- (id)valueForBinding:(CPString)aBinding +{ + if (aBinding == CPSelectionIndexesBinding) + { + var result = [CPIndexSet indexSet], + idx = [_source indexOfTabViewItem:[_source selectedTabViewItem]]; + + if (idx !== CPNotFound) + [result addIndex:idx]; + + return result; + } + else if (aBinding == CPSelectedIndexBinding) + return [_source indexOfTabViewItem:[_source selectedTabViewItem]]; } @end @@ -515,12 +764,13 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", _font = [aCoder decodeObjectForKey:CPTabViewFontKey]; [_tabs setFont:_font]; - _items = [aCoder decodeObjectForKey:CPTabViewItemsKey]; - [_items makeObjectsPerformSelector:@selector(_setTabView:) withObject:self]; + var items = [aCoder decodeObjectForKey:CPTabViewItemsKey] || [CPArray array]; + [self _insertTabViewItems:items atIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [items count])]]; [self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]]; - self.selectOnAwake = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey]; + _selectedTabViewItem = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey]; + _type = [aCoder decodeIntForKey:CPTabViewTypeKey]; } @@ -529,14 +779,23 @@ 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. - [self _updateItems]; - if (self.selectOnAwake) + if (_selectedTabViewItem) { - [self selectTabViewItem:self.selectOnAwake]; - delete self.selectOnAwake; + var idx = [self indexOfTabViewItem:_selectedTabViewItem]; + + if (idx !== CPNotFound) + { + // Temporarily set the selected item to not selected. + // It allows the initial selection to be made correctly. + _selectedTabViewItem = nil; + + [self selectTabViewItemAtIndex:idx]; + } } var type = _type; @@ -558,9 +817,7 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", [aCoder encodeObject:_items forKey:CPTabViewItemsKey]; - var selected = [self selectedTabViewItem]; - if (selected) - [aCoder encodeObject:selected forKey:CPTabViewSelectedItemKey]; + [aCoder encodeConditionalObject:_selectedTabViewItem forKey:CPTabViewSelectedItemKey]; [aCoder encodeInt:_type forKey:CPTabViewTypeKey]; [aCoder encodeObject:_font forKey:CPTabViewFontKey]; @@ -569,3 +826,26 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", } @end + +@implementation _CPTabViewBox : CPBox +{ + CPTabView _tabView @accessors(property=tabView); +} + + +#pragma mark - +#pragma mark Override + +- (CPView)hitTest:(CGPoint)aPoint +{ + // Here we check if we have clicked on the segmentedControl of the tabView or not + // If YES, the CPBox should not handle the click + var segmentIndex = [_tabView._tabs testSegment:[_tabView._tabs convertPoint:aPoint fromView:[self superview]]]; + + if (segmentIndex != CPNotFound) + return nil; + + return [super hitTest:aPoint]; +} + +@end \ No newline at end of file diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index 671d5bc78..78795d666 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -24,6 +24,7 @@ @import "CPView.j" @class CPTabView +@class CPViewController /* The tab is currently selected. @@ -53,14 +54,34 @@ CPPressedTab = 2; */ @implementation CPTabViewItem : CPObject { - id _identifier; - CPString _label; + id _identifier; + CPString _label; + CPInteger _tag @accessors(property=tag); - CPView _view; - CPView _auxiliaryView; + CPView _view; + CPView _auxiliaryView; - CPTabView _tabView; - unsigned _tabState; // Looks like it is not yet implemented + CPTabView _tabView; + unsigned _tabState; // Looks like it is not yet implemented + + CPImage _image @accessors(property=image); + CPViewController _viewController @accessors(getter=viewController); + + BOOL _enabled @accessors(property=enabled); + BOOL _selected @accessors(property=selected); + CGRect _tabRect @accessors(property=frame); + float _width @accessors(property=width); +} + +/* + +*/ ++ (CPTabViewItem)tabViewItemWithViewController:(CPViewController)aViewController +{ + var item = [[CPTabViewItem alloc] init]; + [item setViewController:aViewController]; + + return item; } - (id)init @@ -68,6 +89,19 @@ CPPressedTab = 2; return [self initWithIdentifier:@""]; } +- (void)_init +{ + _tag = 0; + _viewController = nil; + _image = nil; + _tabState = 0; + _tabView = nil; + _enabled = YES; + _selected = NO; + _tabRect = CGRectMakeZero(); + _width = 0; +} + /*! Initializes the tab view item with the specified identifier. @return the initialized CPTabViewItem @@ -76,8 +110,12 @@ CPPressedTab = 2; { self = [super init]; - if (self) - _identifier = anIdentifier; + [self _init]; + + _identifier = anIdentifier; + _label = nil; + _view = nil; + //_auxiliaryView = nil; return self; } @@ -89,8 +127,11 @@ CPPressedTab = 2; */ - (void)setLabel:(CPString)aLabel { + if ([aLabel isEqualToString:_label]) + return; + _label = aLabel; - [_tabView setNeedsLayout]; + [_tabView tileWithChangedItem:self]; } /*! @@ -101,6 +142,28 @@ CPPressedTab = 2; return _label; } +// Working With Images +/*! + Sets the CPTabViewItem's image. + @param anImage the image for the item +*/ +- (void)setImage:(CPImage)anImage +{ + if ([anImage isEqual:_image]) + return; + + _image = anImage; + [_tabView tileWithChangedItem:self]; +} + +/*! + Returns the CPTabViewItem's image +*/ +- (CPImage)image +{ + return _image; +} + // Checking the Tab Display State /*! Returns the tab's current state. @@ -140,7 +203,7 @@ CPPressedTab = 2; _view = aView; if ([_tabView selectedTabViewItem] == self) - [_tabView _setContentViewFromItem:self]; + [_tabView _displayItemView:_view]; } /*! @@ -148,6 +211,9 @@ CPPressedTab = 2; */ - (CPView)view { + if (!_view && _viewController) + return [_viewController view]; // The view controller loads here. + return _view; } @@ -186,10 +252,32 @@ CPPressedTab = 2; _tabView = aView; } +/*! + Sets the specified view controller for the tab view item. + @param aViewController an instance of CPViewController. +*/ +- (void)setViewController:(CPViewController)aViewController +{ + _viewController = aViewController; + + var identifier = [aViewController cibName], + title = [_viewController title]; + + if (identifier) + _identifier = identifier; + + if (title) + [self setLabel:title]; + + if ([_tabView selectedTabViewItem] == self) + [_tabView _displayItemView:[_viewController view]]; +} + @end var CPTabViewItemIdentifierKey = "CPTabViewItemIdentifierKey", CPTabViewItemLabelKey = "CPTabViewItemLabelKey", + CPTabViewItemImageKey = "CPTabViewItemImageKey", CPTabViewItemViewKey = "CPTabViewItemViewKey", CPTabViewItemAuxViewKey = "CPTabViewItemAuxViewKey"; @@ -202,8 +290,11 @@ var CPTabViewItemIdentifierKey = "CPTabViewItemIdentifierKey", if (self) { + [self _init]; + _identifier = [aCoder decodeObjectForKey:CPTabViewItemIdentifierKey]; _label = [aCoder decodeObjectForKey:CPTabViewItemLabelKey]; + _image = [aCoder decodeObjectForKey:CPTabViewItemImageKey]; _view = [aCoder decodeObjectForKey:CPTabViewItemViewKey]; _auxiliaryView = [aCoder decodeObjectForKey:CPTabViewItemAuxViewKey]; @@ -216,6 +307,7 @@ var CPTabViewItemIdentifierKey = "CPTabViewItemIdentifierKey", { [aCoder encodeObject:_identifier forKey:CPTabViewItemIdentifierKey]; [aCoder encodeObject:_label forKey:CPTabViewItemLabelKey]; + [aCoder encodeObject:_image forKey:CPTabViewItemImageKey]; [aCoder encodeObject:_view forKey:CPTabViewItemViewKey]; [aCoder encodeObject:_auxiliaryView forKey:CPTabViewItemAuxViewKey]; diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j index 36d6d1ef1..58f5cb152 100644 --- a/AppKit/CPTableHeaderView.j +++ b/AppKit/CPTableHeaderView.j @@ -24,6 +24,7 @@ @import "CPView.j" @import "CPCursor.j" @import "_CPImageAndTextView.j" +@import "CPTrackingArea.j" @class CPTableView @@ -305,7 +306,9 @@ var CPTableHeaderViewResizeZone = 3.0, self = [super initWithFrame:aFrame]; if (self) + { [self _init]; + } return self; } @@ -456,34 +459,26 @@ var CPTableHeaderViewResizeZone = 3.0, _activeColumn = -1; } -- (void)mouseEntered:(CPEvent)theEvent +@end + +@implementation CPTableHeaderView (CPTrackingArea) + +- (void)updateTrackingAreas { - var location = [theEvent globalLocation]; - - if (CGPointEqualToPoint(location, _mouseEnterExitLocation)) - return; - - _mouseEnterExitLocation = location; - - [self _updateResizeCursor:theEvent]; + [self removeAllTrackingAreas]; + + var options = CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow; + + for (var i = 0; i < _tableView._tableColumns.length; i++) + [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:[self _cursorRectForColumn:i] + options:options + owner:self + userInfo:nil]]; } -- (void)mouseMoved:(CPEvent)theEvent +- (void)cursorUpdate:(CPEvent)anEvent { - [self _updateResizeCursor:theEvent]; -} - -- (void)mouseExited:(CPEvent)theEvent -{ - var location = [theEvent globalLocation]; - - if (CGPointEqualToPoint(location, _mouseEnterExitLocation)) - return; - - _mouseEnterExitLocation = location; - - // FIXME: we should use CPCursor push/pop (if previous currentCursor != arrow). - [[CPCursor arrowCursor] set]; + [self _updateResizeCursor:anEvent]; } @end @@ -622,7 +617,7 @@ var CPTableHeaderViewResizeZone = 3.0, [[headerView subviews] makeObjectsPerformSelector:@selector(setHidden:) withObject:YES]; // The underlying column header shows normal state - [headerView unsetThemeState:CPThemeStateHighlighted | CPThemeStateSelected]; + [headerView unsetThemeStates:[CPThemeStateHighlighted, CPThemeStateSelected]]; // Keep track of the location within the column header where the original mousedown occurred _columnDragHeaderView = [_columnDragView viewWithTag:CPTableHeaderViewDragColumnHeaderTag]; @@ -697,6 +692,7 @@ var CPTableHeaderViewResizeZone = 3.0, [[_tableView headerView] setNeedsLayout]; [[CPCursor arrowCursor] set]; + [self updateTrackingAreas]; } - (BOOL)_shouldResizeTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint @@ -762,7 +758,10 @@ var CPTableHeaderViewResizeZone = 3.0, var tableColumn = [[_tableView tableColumns] objectAtIndex:aColumnIndex]; if ([tableColumn width] != _columnOldWidth) + { [_tableView _didResizeTableColumn:tableColumn oldWidth:_columnOldWidth]; + [self updateTrackingAreas]; + } [tableColumn setDisableResizingPosting:NO]; [_tableView setDisableAutomaticResizing:NO]; @@ -772,13 +771,6 @@ var CPTableHeaderViewResizeZone = 3.0, - (void)_updateResizeCursor:(CPEvent)theEvent { - // never get stuck in resize cursor mode (FIXME take out when we turn on tracking rects) - if (![_tableView allowsColumnResizing] || ([theEvent type] === CPLeftMouseUp && ![[self window] acceptsMouseMovedEvents])) - { - [[CPCursor arrowCursor] set]; - return; - } - var mouseLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil], mouseOverLocation = CGPointMake(MAX(mouseLocation.x - CPTableHeaderViewResizeZone, 0.0), mouseLocation.y), overColumn = [self columnAtPoint:mouseOverLocation]; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 8ea492abb..9b6ea2272 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -644,12 +644,8 @@ NOT YET IMPLEMENTED }]; } -// Reloads the views AND the data -- (void)_reloadDataViews +- (void)_setupReload { - //if (!_dataSource) - // return; - _reloadAllRows = YES; _objectValues = { }; _cachedRowHeights = []; @@ -661,11 +657,24 @@ NOT YET IMPLEMENTED // This updates the size too. [self noteNumberOfRowsChanged]; +} +// Reloads the views AND the data +- (void)_reloadDataViews +{ + [self _setupReload]; [self setNeedsLayout]; [self setNeedsDisplay:YES]; } +// Reloads the views AND the data +- (void)_reloadDataViewsSynchronously +{ + [self _setupReload]; + [self layout]; + [self display]; +} + //Target-action Behavior /*! Sets the message sent to the target when the user double-clicks an @@ -3593,6 +3602,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; @@ -3646,7 +3658,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad var view = nil; if (_viewForTableColumnRowSelector) - view = objj_msgSend(self, _viewForTableColumnRowSelector, aTableColumn, aRow); + view = self.isa.objj_msgSend2(self, _viewForTableColumnRowSelector, aTableColumn, aRow); if (!view) { @@ -4208,7 +4220,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad while (count--) { var currentIndex = indexes[count], - rowRect = CGRectIntersection(objj_msgSend(self, rectSelector, currentIndex), aRect); + rowRect = CGRectIntersection(self.isa.objj_msgSend1(self, rectSelector, currentIndex), aRect); // group rows get the same highlight style as other rows if they're source list... if (!drawGradient) @@ -4282,7 +4294,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad for (var i = 0; i < count2; i++) { - var rect = objj_msgSend(self, rectSelector, indexes[i]), + var rect = self.isa.objj_msgSend1(self, rectSelector, indexes[i]), minX = CGRectGetMinX(rect) - 0.5, maxX = CGRectGetMaxX(rect) - 0.5, minY = CGRectGetMinY(rect) - 0.5, @@ -4677,7 +4689,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad { if ([self _sendDelegateShouldEditTableColumn:column row:rowIndex]) { - [self editColumn:columnIndex row:rowIndex withEvent:nil select:YES]; + [self editColumn:columnIndex row:rowIndex withEvent:[CPApp currentEvent] select:YES]; return; } } @@ -5196,7 +5208,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]; @@ -5300,6 +5312,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if ([aView isKindOfClass:[CPTextField class]]) [aView setBezeled:editingState]; } + /*! Edits the dataview at a given row and column. This method is usually invoked automatically and should rarely be invoked directly The row at supplied rowIndex must be selected otherwise an exception is thrown. @@ -5314,11 +5327,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (![self isRowSelected:rowIndex]) [[CPException exceptionWithName:@"Error" reason:@"Attempt to edit row " + rowIndex + " when not selected." userInfo:nil] raise]; - [self reloadData]; - - // Process all events immediately to make sure table data views are reloaded. - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - + [self _reloadDataViewsSynchronously]; [self scrollRowToVisible:rowIndex]; [self scrollColumnToVisible:columnIndex]; @@ -6301,17 +6310,17 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", var showCallback = function() { - objj_msgSend(self, "setHidden:", NO) + [self setHidden: NO]; isBlinking = NO; }; var hideCallback = function() { - objj_msgSend(self, "setHidden:", YES) + [self setHidden: YES]; isBlinking = YES; }; - objj_msgSend(self, "setHidden:", YES); + [self setHidden: YES]; [CPTimer scheduledTimerWithTimeInterval:0.1 callback:showCallback repeats:NO]; [CPTimer scheduledTimerWithTimeInterval:0.19 callback:hideCallback repeats:NO]; [CPTimer scheduledTimerWithTimeInterval:0.27 callback:showCallback repeats:NO]; @@ -6391,23 +6400,18 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", - (void)awakeFromCib { + [super awakeFromCib]; [self setThemeState:CPThemeStateTableDataView]; } - (BOOL)setThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); - [super setThemeState:aState]; [self recursivelyPerformSelector:@selector(setThemeState:) withObject:aState startingFrom:self]; } - (BOOL)unsetThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); - [super unsetThemeState:aState]; [self recursivelyPerformSelector:@selector(unsetThemeState:) withObject:aState startingFrom:self]; } 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 ef68cfe5e..98ba7eaa7 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -34,7 +34,6 @@ @global CPStringPboardType @global CPCursor - @protocol CPTextFieldDelegate @end @@ -66,11 +65,11 @@ var CPTextFieldDOMCurrentElement = nil, CPTextFieldCachedSelectStartFunction = nil, CPTextFieldCachedDragFunction = nil, CPTextFieldBlurHandler = nil, - CPTextFieldInputFunction = nil; + CPTextFieldInputFunction = nil, + CPTexFieldCurrentCSSSelectableField = nil; var CPSecureTextFieldCharacter = "\u2022"; - function CPTextFieldBlurFunction(anEvent, owner, domElement, inputElement, resigning, didBlurRef) { if (owner && domElement != inputElement.parentNode) @@ -87,7 +86,7 @@ function CPTextFieldBlurFunction(anEvent, owner, domElement, inputElement, resig */ if ([owner _isWithinUsablePlatformRect]) { - window.setTimeout(function() + [[CPRunLoop mainRunLoop] performBlock:function() { // This will prevent to jump to the focused element var previousScrollingOrigin = [owner _scrollToVisibleRectAndReturnPreviousOrigin]; @@ -95,7 +94,8 @@ function CPTextFieldBlurFunction(anEvent, owner, domElement, inputElement, resig inputElement.focus(); [owner _restorePreviousScrollingOrigin:previousScrollingOrigin]; - }, 0.0); + } + argument:nil order:0 modes:[CPDefaultRunLoopMode]]; } } @@ -376,7 +376,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); _sendActionOn = CPKeyUpMask | CPKeyDownMask; - [self setValue:CPLeftTextAlignment forThemeAttribute:@"alignment"]; + [self setValue:CPNaturalTextAlignment forThemeAttribute:@"alignment"]; } return self; @@ -671,11 +671,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); CPTextFieldInputOwner = self; - window.setTimeout(function() + [[CPRunLoop mainRunLoop] performBlock:function() { - /* - setTimeout handlers are not guaranteed to fire in the order they were initiated. This can cause a race condition when several windows with text fields are opened quickly, resulting in several instances of this timeout function being fired, perhaps out of order. So we have to check that by the time this function is fired, CPTextFieldInputOwner has not been changed to another text field in the meantime. - */ if (CPTextFieldInputOwner !== self) return; @@ -688,18 +685,42 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // Select the text if the textfield became first responder through keyboard interaction if (!_willBecomeFirstResponderByClick) + { [self _selectText:self immediately:YES]; + } + else + { + var point = CGPointMake([self convertPointFromBase:[[CPApp currentEvent] locationInWindow]].x - [self currentValueForThemeAttribute:@"content-inset"].left, 0), + position = [CPPlatformString charPositionOfString:[self stringValue] withFont:[self font] forPoint:point]; + + [self setSelectedRange:CPMakeRange(position, 0)]; + } _willBecomeFirstResponderByClick = NO; [self textDidFocus:[CPNotification notificationWithName:CPTextFieldDidFocusNotification object:self userInfo:nil]]; - }, 0.0); + } argument:nil order:0 modes:[CPDefaultRunLoopMode]]; #endif 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 @@ -753,6 +774,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); element.style.textAlign = "right"; break; + case CPNaturalTextAlignment: + element.style.textAlign = ""; + break; + default: element.style.textAlign = "left"; } @@ -814,6 +839,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _resignFirstKeyResponder]; _isEditing = NO; + if ([self isEditable]) { [self textDidEndEditing:[CPNotification notificationWithName:CPControlTextDidEndEditingNotification object:self userInfo:@{"CPTextMovement": [self _currentTextMovement]}]]; @@ -989,6 +1015,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } else if ([self isSelectable]) { + [self _setEnableCSSSelection:YES]; if (document.attachEvent) { CPTextFieldCachedSelectStartFunction = [[self window] platformWindow]._DOMBodyElement.onselectstart; @@ -1030,6 +1057,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])) @@ -1180,7 +1215,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)textDidFocus:(CPNotification)note { // this looks to prevent false propagation of notifications for other objects - if ([note object] != self) + if ([note object] !== self) return; if (_implementedDelegateMethods & CPTextFieldDelegate_controlTextDidFocus_) @@ -1482,7 +1517,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if (immediately) element.select(); else - window.setTimeout(function() { element.select(); }, 0); + [[CPRunLoop mainRunLoop] performBlock:function(){ element.select(); } argument:nil order:0 modes:[CPDefaultRunLoopMode]]; } else if (wind !== nil && [wind makeFirstResponder:self]) [self _selectText:sender immediately:immediately]; diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 426c462ca..a9246cc89 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -36,7 +36,6 @@ var CPThemesByName = { }, /*! @ingroup appkit */ - @implementation CPTheme : CPObject { CPString _name; @@ -142,20 +141,19 @@ var CPThemesByName = { }, if (!className) { - if ([aClass isKindOfClass:[CPView class]]) + if ([aClass respondsToSelector:@selector(defaultThemeClass)]) { - if ([aClass respondsToSelector:@selector(defaultThemeClass)]) - className = [aClass defaultThemeClass]; - else if ([aClass respondsToSelector:@selector(themeClass)]) - { - CPLog.warn(@"%@ themeClass is deprecated in favor of defaultThemeClass", CPStringFromClass(aClass)); - className = [aClass themeClass]; - } - else - return nil; + className = [aClass defaultThemeClass]; + } + else if ([aClass respondsToSelector:@selector(themeClass)]) + { + CPLog.warn(@"%@ themeClass is deprecated in favor of defaultThemeClass", CPStringFromClass(aClass)); + className = [aClass themeClass]; } else - [CPException raise:CPInvalidArgumentException reason:@"aClass must be a class object or a string."]; + { + return nil; + } } return [_attributes objectForKey:className]; @@ -328,6 +326,7 @@ function ThemeState(stateNames) { if (!stateNames.hasOwnProperty(key)) continue; + if (key !== 'normal') { this._stateNames[key] = true; @@ -345,8 +344,10 @@ function ThemeState(stateNames) this._stateNameString = stateNameKeys[0]; var stateNameLength = stateNameKeys.length; + for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++) this._stateNameString = this._stateNameString + "+" + stateNameKeys[stateIndex]; + this._stateNameCount = stateNameLength; } @@ -393,7 +394,19 @@ ThemeState.prototype.without = function(aState) if (!aState || aState === [CPNull null]) return this; + var firstTransform = CPThemeWithoutTransform[this._stateNameString], + result; + + if (firstTransform) + { + result = firstTransform[aState._stateNameString]; + + if (result) + return result; + } + var newStates = {}; + for (var stateName in this._stateNames) { if (!this._stateNames.hasOwnProperty(stateName)) @@ -403,25 +416,54 @@ ThemeState.prototype.without = function(aState) newStates[stateName] = true; } - return ThemeState._cacheThemeState(new ThemeState(newStates)); + result = ThemeState._cacheThemeState(new ThemeState(newStates)); + + if (!firstTransform) + firstTransform = CPThemeWithoutTransform[this._stateNameString] = {}; + + firstTransform[aState._stateNameString] = result; + + return result; } ThemeState.prototype.and = function(aState) { - return CPThemeState(this, aState); + var firstTransform = CPThemeAndTransform[this._stateNameString], + result; + + if (firstTransform) + { + result = firstTransform[aState._stateNameString]; + + if (result) + return result; + } + + result = CPThemeState(this, aState); + + if (!firstTransform) + firstTransform = CPThemeAndTransform[this._stateNameString] = {}; + + firstTransform[aState._stateNameString] = result; + + return result; } -var CPThemeStates = {}; +var CPThemeStates = {}, + CPThemeWithoutTransform = {}, + CPThemeAndTransform = {}; ThemeState._cacheThemeState = function(aState) { // We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true. var themeState = CPThemeStates[String(aState)]; + if (themeState === undefined) { themeState = aState; CPThemeStates[String(themeState)] = themeState; } + return themeState; } @@ -439,14 +481,17 @@ function CPThemeState() throw "CPThemeState() must be called with at least one string argument"; var themeState; + if (arguments.length === 1 && typeof arguments[0] === 'string') { themeState = CPThemeStates[arguments[0]]; + if (themeState !== undefined) return themeState; } var stateNames = {}; + for (var argIndex = 0; argIndex < arguments.length; argIndex++) { if (arguments[argIndex] === [CPNull null] || !arguments[argIndex]) @@ -458,12 +503,14 @@ function CPThemeState() { if (!arguments[argIndex]._stateNames.hasOwnProperty(stateName)) continue; + stateNames[stateName] = true; } } else { var allNames = arguments[argIndex].split('+'); + for (var nameIndex = 0; nameIndex < allNames.length; nameIndex++) stateNames[allNames[nameIndex]] = true; } @@ -523,6 +570,9 @@ CPThemeStateControlSizeRegular = CPThemeState("controlSizeRegular"); CPThemeStateControlSizeSmall = CPThemeState("controlSizeSmall"); CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); +CPThemeStateNormalString = String(CPThemeStateNormal); + + @implementation _CPThemeAttribute : CPObject { CPString _name; @@ -533,7 +583,7 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); _CPThemeAttribute _themeDefaultAttribute; } -- (id)initWithName:(CPString)aName defaultValue:(id)aDefaultValue +- (id)initWithName:(CPString)aName defaultValue:(id)aDefaultValue defaultAttribute:(_CPThemeAttribute)aDefaultAttribute { self = [super init]; @@ -542,7 +592,9 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); _cache = { }; _name = aName; _defaultValue = aDefaultValue; - _values = @{}; + + if (aDefaultAttribute) + _themeDefaultAttribute = aDefaultAttribute; } return self; @@ -563,24 +615,41 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); return [_values count] > 0; } -- (void)setValue:(id)aValue +- (_CPThemeAttribute)attributeBySettingValue:(id)aValue { - _cache = {}; + var attribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:_themeDefaultAttribute]; - if (aValue === undefined || aValue === nil) - _values = @{}; - else - _values = @{ String(CPThemeStateNormal): aValue }; + if (aValue !== undefined && aValue !== nil) + attribute._values = @{ CPThemeStateNormalString: aValue }; + + return attribute; } -- (void)setValue:(id)aValue forState:(ThemeState)aState +- (_CPThemeAttribute)attributeBySettingValue:(id)aValue forState:(ThemeState)aState { - _cache = { }; + var shouldRemoveValue = aValue === undefined || aValue === nil, + attribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:_themeDefaultAttribute], + values = _values; - if ((aValue === undefined) || (aValue === nil)) - [_values removeObjectForKey:String(aState)]; - else - [_values setObject:aValue forKey:String(aState)]; + if (values != null) + { + values = [values copy]; + + if (shouldRemoveValue) + [values removeObjectForKey:String(aState)]; + else + [values setObject:aValue forKey:String(aState)]; + + attribute._values = values; + } + else if (!shouldRemoveValue) + { + values = [[CPDictionary alloc] init]; + [values setObject:aValue forKey:String(aState)]; + attribute._values = values; + } + + return attribute; } - (id)value @@ -605,7 +674,7 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); if (aState._stateNameCount > 1) { var states = [_values allKeys], - count = states.length, + count = states ? states.length : 0, largestThemeState = 0; while (count--) @@ -643,27 +712,41 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); return value; } -- (void)setParentAttribute:(_CPThemeAttribute)anAttribute +- (_CPThemeAttribute)attributeBySettingParentAttribute:(_CPThemeAttribute)anAttribute { if (_themeDefaultAttribute === anAttribute) - return; + return self; - _cache = { }; - _themeDefaultAttribute = anAttribute; + var attribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:anAttribute]; + + attribute._values = [_values copy]; + + return attribute; } - (_CPThemeAttribute)attributeMergedWithAttribute:(_CPThemeAttribute)anAttribute { - var mergedAttribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue]; + var mergedAttribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:_themeDefaultAttribute]; mergedAttribute._values = [_values copy]; - [mergedAttribute._values addEntriesFromDictionary:anAttribute._values]; + + if (anAttribute._values) + mergedAttribute._values ? [mergedAttribute._values addEntriesFromDictionary:anAttribute._values] : [anAttribute._values copy]; return mergedAttribute; } +- (CPString)description +{ + return [super description] + @" Name: " + _name + @", defaultAttribute: " + _themeDefaultAttribute + @", defaultValue: " + _defaultValue + @", values: " + _values; +} + @end + +// This is used to pass 'parrentAttribute' to the coder +var ParentAttributeForCoder = nil; + @implementation _CPThemeAttribute (CPCoding) - (id)initWithCoder:(CPCoder)aCoder @@ -677,13 +760,16 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); _name = [aCoder decodeObjectForKey:@"name"]; _defaultValue = [aCoder decodeObjectForKey:@"defaultValue"]; _values = @{}; + _themeDefaultAttribute = ParentAttributeForCoder; if ([aCoder containsValueForKey:@"value"]) { - var state = String(CPThemeStateNormal); + var state; if ([aCoder containsValueForKey:@"state"]) state = [aCoder decodeObjectForKey:@"state"]; + else + state = CPThemeStateNormalString [_values setObject:[aCoder decodeObjectForKey:"value"] forKey:state]; } @@ -711,7 +797,7 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini"); [aCoder encodeObject:_defaultValue forKey:@"defaultValue"]; var keys = [_values allKeys], - count = keys.length; + count = keys ? keys.length : 0; if (count === 1) { @@ -749,7 +835,7 @@ function CPThemeAttributeEncode(aCoder, aThemeAttribute) { var state = [values allKeys][0]; - if (state === String(CPThemeStateNormal)) + if (state === CPThemeStateNormalString) { [aCoder encodeObject:[values objectForKey:state] forKey:key]; @@ -767,30 +853,24 @@ function CPThemeAttributeEncode(aCoder, aThemeAttribute) return NO; } -function CPThemeAttributeDecode(aCoder, anAttributeName, aDefaultValue, aTheme, aClass) +function CPThemeAttributeDecode(aCoder, attribute) { - var key = "$a" + anAttributeName; + var key = "$a" + attribute._name; - if (![aCoder containsValueForKey:key]) - var attribute = [[_CPThemeAttribute alloc] initWithName:anAttributeName defaultValue:aDefaultValue]; - - else + if ([aCoder containsValueForKey:key]) { - var attribute = [aCoder decodeObjectForKey:key]; + ParentAttributeForCoder = attribute._themeDefaultAttribute; - if (!attribute || !attribute.isa || ![attribute isKindOfClass:[_CPThemeAttribute class]]) - { - var themeAttribute = [[_CPThemeAttribute alloc] initWithName:anAttributeName defaultValue:aDefaultValue]; + var decodedAttribute = [aCoder decodeObjectForKey:key]; - [themeAttribute setValue:attribute]; + ParentAttributeForCoder = nil; - attribute = themeAttribute; - } + if (!decodedAttribute || !decodedAttribute.isa || ![decodedAttribute isKindOfClass:[_CPThemeAttribute class]]) + attribute = [attribute attributeBySettingValue:decodedAttribute]; + else + attribute = decodedAttribute; } - if (aTheme && aClass) - [attribute setParentAttribute:[aTheme attributeWithName:anAttributeName forClass:aClass]]; - return attribute; } diff --git a/AppKit/CPThemeBlend.j b/AppKit/CPThemeBlend.j index 8455bd4c0..78cceaac3 100644 --- a/AppKit/CPThemeBlend.j +++ b/AppKit/CPThemeBlend.j @@ -64,12 +64,10 @@ */ - (CPArray)themeNames { - var names = []; - - for (var i = 0; i < _themes.length; ++i) - names.push(_themes[i].substring(0, _themes[i].indexOf(".keyedtheme"))); - - return names; + return [_themes arrayByApplyingBlock:function(theme) + { + return theme.substring(0, theme.indexOf(".keyedtheme")); + }]; } - (void)loadWithDelegate:(id)aDelegate diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 3bc4b3ea3..858b11495 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -448,14 +448,14 @@ CPTokenFieldDeleteButtonType = 1; element.style.width = CGRectGetWidth(contentRect) + "px"; element.style.height = [font defaultLineHeightForFont] + "px"; - window.setTimeout(function() + [[CPRunLoop mainRunLoop] performBlock:function() { [_tokenScrollView documentView]._DOMElement.appendChild(element); //post CPControlTextDidBeginEditingNotification [self textDidBeginEditing:[CPNotification notificationWithName:CPControlTextDidBeginEditingNotification object:self userInfo:nil]]; - window.setTimeout(function() + [[CPRunLoop mainRunLoop] performBlock:function() { // This will prevent to jump to the focused element var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin]; @@ -465,10 +465,10 @@ CPTokenFieldDeleteButtonType = 1; [self _restorePreviousScrollingOrigin:previousScrollingOrigin]; CPTokenFieldInputOwner = self; - }, 0.0); + } argument:nil order:0 modes:[CPDefaultRunLoopMode]]; [self textDidFocus:[CPNotification notificationWithName:CPTextFieldDidFocusNotification object:self userInfo:nil]]; - }, 0.0); + } argument:nil order:0 modes:[CPDefaultRunLoopMode]]; [[[self window] platformWindow] _propagateCurrentDOMEvent:YES]; @@ -1475,9 +1475,6 @@ CPTokenFieldDeleteButtonType = 1; - (BOOL)setThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); - var r = [super setThemeState:aState]; // Share hover state with the disclosure and delete buttons. @@ -1492,9 +1489,6 @@ CPTokenFieldDeleteButtonType = 1; - (BOOL)unsetThemeState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); - var r = [super unsetThemeState:aState]; // Share hover state with the disclosure and delete button. diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 49c78924e..b62aa82d6 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -459,11 +459,10 @@ var CPToolbarsByIdentifier = nil, /* @ignore */ - (id)_itemsWithIdentifiers:(CPArray)identifiers { - var items = []; - for (var i = 0; i < identifiers.length; i++) - [items addObject:[self _itemForItemIdentifier:identifiers[i] willBeInsertedIntoToolbar:NO]]; - - return items; + return [identifiers arrayByApplyingBlock:function(identifier) + { + return [self _itemForItemIdentifier:identifier willBeInsertedIntoToolbar:NO]; + }]; } /* @ignore */ diff --git a/AppKit/CPTrackingArea.j b/AppKit/CPTrackingArea.j new file mode 100644 index 000000000..9e41afef4 --- /dev/null +++ b/AppKit/CPTrackingArea.j @@ -0,0 +1,164 @@ +/* + * CPTrackingArea.j + * AppKit + * + * Created by Didier Korthoudt. + * 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 + +@class CPView + +/* @group CPTrackingAreaOptions */ +@typedef CPTrackingAreaOptions +CPTrackingMouseEnteredAndExited = 1 << 1; +CPTrackingMouseMoved = 1 << 2; +CPTrackingCursorUpdate = 1 << 3; +CPTrackingActiveWhenFirstResponder = 1 << 4; +CPTrackingActiveInKeyWindow = 1 << 5; +CPTrackingActiveInActiveApp = 1 << 6; +CPTrackingActiveAlways = 1 << 7; +CPTrackingAssumeInside = 1 << 8; +CPTrackingInVisibleRect = 1 << 9; +CPTrackingEnabledDuringMouseDrag = 1 << 10; + +var CPTrackingAreaViewRectKey = @"CPTrackinkAreaViewRectKey", + CPTrackingAreaOptionsKey = @"CPTrackingAreaOptionsKey", + CPTrackingAreaOwnerKey = @"CPTrackingAreaOwnerKey", + CPTrackingAreaUserInfoKey = @"CPTrackingAreaUserInfoKey", + CPTrackingAreaReferencingViewKey = @"CPTrackingAreaReferencingViewKey", + CPTrackingAreaWindowRect = @"CPTrackingAreaWindowRect"; + +CPTrackingOwnerImplementsMouseEntered = 1 << 1; +CPTrackingOwnerImplementsMouseExited = 1 << 2; +CPTrackingOwnerImplementsMouseMoved = 1 << 3; +CPTrackingOwnerImplementsCursorUpdate = 1 << 4; + +/*! + @ingroup appkit + + A CPTrackingArea defines a region of view that generates mouse-tracking and + cursor-update events when the mouse is over that region. + */ +@implementation CPTrackingArea : CPObject +{ + CGRect _viewRect @accessors(getter=rect); + CPTrackingAreaOptions _options @accessors(getter=options); + id _owner @accessors(getter=owner); + CPDictionary _userInfo @accessors(getter=userInfo); + + CPView _referencingView @accessors(property=view); + CGRect _windowRect @accessors(getter=windowRect); + + unsigned _implementedOwnerMethods @accessors(getter=implementedOwnerMethods); +} + + +#pragma mark - +#pragma mark Initialization + +/*! + Initializes and returns an object defining a region of a view to receive mouse-tracking events, mouse-moved events, cursor-update events, or possibly + all these events. + */ +- (CPTrackingArea)initWithRect:(CGRect)aRect options:(CPTrackingAreaOptions)options owner:(id)owner userInfo:(CPDictionary)userInfo +{ + if (owner === nil) + [CPException raise:CPInternalInconsistencyException reason:"No owner specified"]; + + if (options === 0) + [CPException raise:CPInternalInconsistencyException reason:"Invalid CPTrackingArea options"]; + + // Check options: + // - at least one of CPTrackingMouseEnteredAndExited, CPTrackingMouseMoved, CPTrackingCursorUpdate + // - exactly one of CPTrackingActiveWhenFirstResponder, CPTrackingActiveInKeyWindow, CPTrackingActiveInActiveApp, CPTrackingActiveAlways + // - no check on CPTrackingAssumeInside, CPTrackingInVisibleRect, CPTrackingEnableDuringMouseDrag + + if (!((options & CPTrackingMouseEnteredAndExited) || (options & CPTrackingMouseMoved) || (options & CPTrackingCursorUpdate))) + [CPException raise:CPInternalInconsistencyException reason:"Invalid CPTrackingAreaOptions: must use at least one of [CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate]"]; + + if ((((options & CPTrackingActiveWhenFirstResponder) > 0) + ((options & CPTrackingActiveInKeyWindow) > 0) + ((options & CPTrackingActiveInActiveApp) > 0) + ((options & CPTrackingActiveAlways) > 0)) !== 1) + [CPException raise:CPInternalInconsistencyException reason:"Tracking area options may only specify one of [CPTrackingActiveWhenFirstResponder | CPTrackingActiveInKeyWindow | CPTrackingActiveInActiveApp | CPTrackingActiveAlways]."]; + + if (self = [super init]) + { + _viewRect = aRect; + _options = options; + _owner = owner; + _userInfo = userInfo; + + // Cache owner implemented methods + + if ([_owner respondsToSelector:@selector(mouseEntered:)]) + _implementedOwnerMethods |= CPTrackingOwnerImplementsMouseEntered; + + if ([_owner respondsToSelector:@selector(mouseExited:)]) + _implementedOwnerMethods |= CPTrackingOwnerImplementsMouseExited; + + if ([_owner respondsToSelector:@selector(mouseMoved:)]) + _implementedOwnerMethods |= CPTrackingOwnerImplementsMouseMoved; + + if ([_owner respondsToSelector:@selector(cursorUpdate:)]) + _implementedOwnerMethods |= CPTrackingOwnerImplementsCursorUpdate; + } + + return self; +} + + +#pragma mark - +#pragma mark Implementation + +- (void)_updateWindowRect +{ + _windowRect = [_referencingView convertRect:((_options & CPTrackingInVisibleRect) ? [_referencingView visibleRect] : _viewRect) toView:[[_referencingView window] _windowView]]; +} + +@end + +#pragma mark - +#pragma mark CPCoding + +@implementation CPTrackingArea (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super init]) + { + _viewRect = [aCoder decodeObjectForKey:CPTrackingAreaViewRectKey]; + _options = [aCoder decodeObjectForKey:CPTrackingAreaOptionsKey]; + _owner = [aCoder decodeObjectForKey:CPTrackingAreaOwnerKey]; + _userInfo = [aCoder decodeObjectForKey:CPTrackingAreaUserInfoKey]; + _referencingView = [aCoder decodeObjectForKey:CPTrackingAreaReferencingViewKey]; + _windowRect = [aCoder decodeObjectForKey:CPTrackingAreaWindowRect]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_viewRect forKey:CPTrackingAreaViewRectKey]; + [aCoder encodeObject:_options forKey:CPTrackingAreaOptionsKey]; + [aCoder encodeObject:_owner forKey:CPTrackingAreaOwnerKey]; + [aCoder encodeObject:_userInfo forKey:CPTrackingAreaUserInfoKey]; + [aCoder encodeObject:_referencingView forKey:CPTrackingAreaReferencingViewKey]; + [aCoder encodeObject:_windowRect forKey:CPTrackingAreaWindowRect]; +} + +@end diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 7e392f899..669f21122 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -24,12 +24,15 @@ @import @import +@import "_CPObject+Theme.j" @import "CGAffineTransform.j" @import "CGGeometry.j" +@import "CPAppearance.j" @import "CPColor.j" @import "CPGraphicsContext.j" @import "CPResponder.j" @import "CPTheme.j" +@import "CPTrackingArea.j" @import "CPWindow_Constants.j" @import "_CPDisplayServer.j" @@ -112,8 +115,7 @@ CPViewMaxYMargin = 32; CPViewBoundsDidChangeNotification = @"CPViewBoundsDidChangeNotification"; CPViewFrameDidChangeNotification = @"CPViewFrameDidChangeNotification"; -var CachedNotificationCenter = nil, - CachedThemeAttributes = nil; +var CachedNotificationCenter = nil; #if PLATFORM(DOM) var DOMElementPrototype = nil, @@ -127,11 +129,11 @@ var DOMElementPrototype = nil, var CPViewFlags = { }, CPViewHasCustomDrawRect = 1 << 0, - CPViewHasCustomLayoutSubviews = 1 << 1; + CPViewHasCustomLayoutSubviews = 1 << 1, + CPViewHasCustomViewWillLayout = 1 << 2; var CPViewHighDPIDrawingEnabled = YES; - /*! @ingroup appkit @class CPView @@ -149,7 +151,7 @@ var CPViewHighDPIDrawingEnabled = YES; appearance. Other methods of CPView and CPResponder can also be overridden to handle user generated events. */ -@implementation CPView : CPResponder +@implementation CPView : CPResponder { CPWindow _window; @@ -218,12 +220,6 @@ var CPViewHighDPIDrawingEnabled = YES; BOOL _needsLayout; JSObject _ephemeralSubviews; - // Theming Support - CPTheme _theme; - CPString _themeClass; - JSObject _themeAttributes; - unsigned _themeState; - JSObject _ephemeralSubviewsForNames; CPSet _ephereralSubviews; @@ -241,6 +237,13 @@ var CPViewHighDPIDrawingEnabled = YES; BOOL _isObserving; + BOOL _allowsVibrancy @accessors(property=allowsVibrancy); + CPAppearance _appearance @accessors(getter=appearance); + CPAppearance _effectiveAppearance; + + CPMutableArray _trackingAreas @accessors(getter=trackingAreas, copy); + BOOL _inhibitUpdateTrackingAreas; + id _animator; CPDictionary _animationsDictionary; } @@ -294,27 +297,6 @@ var CPViewHighDPIDrawingEnabled = YES; return CPViewHighDPIDrawingEnabled; } -- (void)_setupViewFlags -{ - var theClass = [self class], - classUID = [theClass UID]; - - if (CPViewFlags[classUID] === undefined) - { - var flags = 0; - - if ([theClass instanceMethodForSelector:@selector(drawRect:)] !== [CPView instanceMethodForSelector:@selector(drawRect:)]) - flags |= CPViewHasCustomDrawRect; - - if ([theClass instanceMethodForSelector:@selector(layoutSubviews)] !== [CPView instanceMethodForSelector:@selector(layoutSubviews)]) - flags |= CPViewHasCustomLayoutSubviews; - - CPViewFlags[classUID] = flags; - } - - _viewClassFlags = CPViewFlags[classUID]; -} - + (CPSet)keyPathsForValuesAffectingFrame { return [CPSet setWithObjects:@"frameOrigin", @"frameSize"]; @@ -330,6 +312,31 @@ var CPViewHighDPIDrawingEnabled = YES; return nil; } +- (void)_setupViewFlags +{ + var theClass = [self class], + classUID = [theClass UID]; + + if (CPViewFlags[classUID] === undefined) + { + var flags = 0; + + if ([theClass instanceMethodForSelector:@selector(drawRect:)] !== [CPView instanceMethodForSelector:@selector(drawRect:)] + || [theClass instanceMethodForSelector:@selector(viewWillDraw)] !== [CPView instanceMethodForSelector:@selector(viewWillDraw)]) + flags |= CPViewHasCustomDrawRect; + + if ([theClass instanceMethodForSelector:@selector(viewWillLayout)] !== [CPView instanceMethodForSelector:@selector(viewWillLayout)]) + flags |= CPViewHasCustomViewWillLayout; + + if ([theClass instanceMethodForSelector:@selector(layoutSubviews)] !== [CPView instanceMethodForSelector:@selector(layoutSubviews)]) + flags |= CPViewHasCustomLayoutSubviews; + + CPViewFlags[classUID] = flags; + } + + _viewClassFlags = CPViewFlags[classUID]; +} + - (id)init { return [self initWithFrame:CGRectMakeZero()]; @@ -352,6 +359,8 @@ var CPViewHighDPIDrawingEnabled = YES; _registeredDraggedTypes = [CPSet set]; _registeredDraggedTypesArray = []; + _trackingAreas = []; + _tag = -1; _frame = CGRectMakeCopy(aFrame); @@ -387,7 +396,6 @@ var CPViewHighDPIDrawingEnabled = YES; _animationsDictionary = @{}; [self _setupViewFlags]; - [self _loadThemeAttributes]; } @@ -804,8 +812,30 @@ var CPViewHighDPIDrawingEnabled = YES; [aWindow _noteRegisteredDraggedTypes:_registeredDraggedTypes]; } + // View must be removed from the current window viewsWithTrackingAreas + if (_window && (_trackingAreas.length > 0)) + [_window _removeTrackingAreaView:self]; + _window = aWindow; + if (_window) + { + var owners; + + if (_trackingAreas.length > 0) + { + // View must be added to the new window viewsWithTrackingAreas + [_window _addTrackingAreaView:self]; + owners = [self _calcTrackingAreaOwners]; + } + else + owners = [self]; + + // Notify that view tracking areas should be updated + // Cocoa doesn't notify on leaving a window + [self _updateTrackingAreasForOwners:owners]; + } + var count = [_subviews count]; while (count--) @@ -845,9 +875,8 @@ var CPViewHighDPIDrawingEnabled = YES; */ - (void)viewDidMoveToSuperview { -// if (_graphicsContext) - [self setNeedsDisplay:YES]; - + [self setNeedsLayout:YES]; + [self setNeedsDisplay:YES]; } /*! @@ -999,6 +1028,9 @@ var CPViewHighDPIDrawingEnabled = YES; if (_isSuperviewAClipView) [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; + + if (!_inhibitUpdateTrackingAreas) + [self _updateTrackingAreas]; } /*! @@ -1069,6 +1101,9 @@ var CPViewHighDPIDrawingEnabled = YES; CPDOMDisplayServerSetStyleLeftTop(_DOMElement, transform, origin.x, origin.y); #endif + + if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications) + [self _updateTrackingAreas]; } /*! @@ -1220,6 +1255,9 @@ var CPViewHighDPIDrawingEnabled = YES; if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) [[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]]; + + if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications) + [self _updateTrackingAreas]; } /*! @@ -1266,6 +1304,9 @@ var CPViewHighDPIDrawingEnabled = YES; if (_isSuperviewAClipView) [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; + + if (!_inhibitUpdateTrackingAreas) + [self _updateTrackingAreas]; } /*! @@ -1331,6 +1372,9 @@ var CPViewHighDPIDrawingEnabled = YES; if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; + + if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications) + [self _updateTrackingAreas]; } /*! @@ -1372,6 +1416,9 @@ var CPViewHighDPIDrawingEnabled = YES; if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications) [[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]]; + + if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications) + [self _updateTrackingAreas]; } @@ -1826,7 +1873,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 @@ -2600,7 +2647,7 @@ setBoundsOrigin: } #if PLATFORM(DOM) - if (_needToSetTransformMatrix) + if (_needToSetTransformMatrix && _highDPIRatio !== 1) [_graphicsContext graphicsPort].setTransform(_highDPIRatio, 0, 0 , _highDPIRatio, 0, 0); #endif @@ -2627,7 +2674,7 @@ setBoundsOrigin: - (void)setNeedsLayout:(BOOL)needLayout { - if (!(_viewClassFlags & CPViewHasCustomLayoutSubviews) || !needLayout) + if (!needLayout) { _needsLayout = NO; return; @@ -2643,18 +2690,44 @@ setBoundsOrigin: return _needsLayout; } +- (void)layout +{ + _needsLayout = NO; + + if (_viewClassFlags & CPViewHasCustomViewWillLayout) + [self viewWillLayout]; + + if (_viewClassFlags & CPViewHasCustomLayoutSubviews) + [self layoutSubviews]; + + [self viewDidLayout]; +} + - (void)layoutIfNeeded { if (_needsLayout) - { - _needsLayout = NO; + [self layout]; +} - [self layoutSubviews]; - } +/*! + @ignore +*/ +- (void)viewWillLayout +{ + +} + +/*! + @ignore +*/ +- (void)viewDidLayout +{ + [self _recomputeAppearance]; } - (void)layoutSubviews { + } /*! @@ -3096,33 +3169,19 @@ setBoundsOrigin: @end + @implementation CPView (Theming) -#pragma mark Theme States -- (unsigned)themeState -{ - return _themeState; -} - -- (BOOL)hasThemeState:(ThemeState)aState -{ - if (aState.isa && [aState isKindOfClass:CPArray]) - return _themeState.hasThemeState.apply(_themeState, aState); - - return _themeState.hasThemeState(aState); -} +#pragma mark Override - (BOOL)setThemeState:(ThemeState)aState { - if (aState && aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); + var shouldLayout = [super setThemeState:aState]; - if (_themeState.hasThemeState(aState)) + if (!shouldLayout) return NO; - _themeState = CPThemeState(_themeState, aState); - - [self setNeedsLayout]; + [self setNeedsLayout:YES]; [self setNeedsDisplay:YES]; return YES; @@ -3130,26 +3189,35 @@ setBoundsOrigin: - (BOOL)unsetThemeState:(ThemeState)aState { - if (aState && aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); + var shouldLayout = [super unsetThemeState:aState]; - var oldThemeState = _themeState; - _themeState = _themeState.without(aState); - - if (oldThemeState === _themeState) + if (!shouldLayout) return NO; - [self setNeedsLayout]; + [self setNeedsLayout:YES]; [self setNeedsDisplay:YES]; return YES; } +- (void)setThemeClass:(CPString)theClass +{ + [super setThemeClass:theClass]; + + [self setNeedsLayout]; + [self setNeedsDisplay:YES]; +} + + +#pragma mark First responder + - (BOOL)becomeFirstResponder { var r = [super becomeFirstResponder]; + if (r) [self _notifyViewDidBecomeFirstResponder]; + return r; } @@ -3158,6 +3226,7 @@ setBoundsOrigin: [self setThemeState:CPThemeStateFirstResponder]; var count = [_subviews count]; + while (count--) [_subviews[count] _notifyViewDidBecomeFirstResponder]; } @@ -3165,8 +3234,10 @@ setBoundsOrigin: - (BOOL)resignFirstResponder { var r = [super resignFirstResponder]; + if (r) [self _notifyViewDidResignFirstResponder]; + return r; } @@ -3175,6 +3246,7 @@ setBoundsOrigin: [self unsetThemeState:CPThemeStateFirstResponder]; var count = [_subviews count]; + while (count--) [_subviews[count] _notifyViewDidResignFirstResponder]; } @@ -3184,6 +3256,7 @@ setBoundsOrigin: [self setThemeState:CPThemeStateKeyWindow]; var count = [_subviews count]; + while (count--) [_subviews[count] _notifyWindowDidBecomeKey]; } @@ -3193,172 +3266,35 @@ setBoundsOrigin: [self unsetThemeState:CPThemeStateKeyWindow]; var count = [_subviews count]; + while (count--) [_subviews[count] _notifyWindowDidResignKey]; } #pragma mark Theme Attributes -+ (CPString)defaultThemeClass -{ - return nil; -} - -- (CPString)themeClass -{ - if (_themeClass) - return _themeClass; - - return [[self class] defaultThemeClass]; -} - -- (void)setThemeClass:(CPString)theClass -{ - _themeClass = theClass; - - [self _loadThemeAttributes]; - - [self setNeedsLayout]; - [self setNeedsDisplay:YES]; -} - -+ (CPDictionary)themeAttributes -{ - return nil; -} - -+ (CPArray)_themeAttributes -{ - if (!CachedThemeAttributes) - CachedThemeAttributes = {}; - - var theClass = [self class], - CPViewClass = [CPView class], - attributes = [], - nullValue = [CPNull null]; - - for (; theClass && theClass !== CPViewClass; theClass = [theClass superclass]) - { - var cachedAttributes = CachedThemeAttributes[class_getName(theClass)]; - - if (cachedAttributes) - { - attributes = attributes.length ? attributes.concat(cachedAttributes) : attributes; - CachedThemeAttributes[[self className]] = attributes; - - break; - } - - var attributeDictionary = [theClass themeAttributes]; - - if (!attributeDictionary) - continue; - - var attributeKeys = [attributeDictionary allKeys], - attributeCount = attributeKeys.length; - - while (attributeCount--) - { - var attributeName = attributeKeys[attributeCount], - attributeValue = [attributeDictionary objectForKey:attributeName]; - - attributes.push(attributeValue === nullValue ? nil : attributeValue); - attributes.push(attributeName); - } - } - - return attributes; -} - -- (void)_loadThemeAttributes -{ - var theClass = [self class], - attributes = [theClass _themeAttributes], - count = attributes.length; - - if (!count) - return; - - var theme = [self theme], - themeClass = [self themeClass]; - - _themeAttributes = {}; - - while (count--) - { - var attributeName = attributes[count--], - attribute = [[_CPThemeAttribute alloc] initWithName:attributeName defaultValue:attributes[count]]; - - [attribute setParentAttribute:[theme attributeWithName:attributeName forClass:themeClass]]; - - _themeAttributes[attributeName] = attribute; - } -} - -- (void)setTheme:(CPTheme)aTheme -{ - if (_theme === aTheme) - return; - - _theme = aTheme; - - [self viewDidChangeTheme]; -} - - (void)_setThemeIncludingDescendants:(CPTheme)aTheme { [self setTheme:aTheme]; [[self subviews] makeObjectsPerformSelector:@selector(_setThemeIncludingDescendants:) withObject:aTheme]; } -- (CPTheme)theme -{ - return _theme; -} - -- (void)viewDidChangeTheme +- (void)objectDidChangeTheme { if (!_themeAttributes) return; - var theme = [self theme], - themeClass = [self themeClass]; - - for (var attributeName in _themeAttributes) - if (_themeAttributes.hasOwnProperty(attributeName)) - [_themeAttributes[attributeName] setParentAttribute:[theme attributeWithName:attributeName forClass:themeClass]]; + [super objectDidChangeTheme]; [self setNeedsLayout]; [self setNeedsDisplay:YES]; } -- (CPDictionary)_themeAttributeDictionary -{ - var dictionary = @{}; - - if (_themeAttributes) - { - var theme = [self theme]; - - for (var attributeName in _themeAttributes) - if (_themeAttributes.hasOwnProperty(attributeName)) - [dictionary setObject:_themeAttributes[attributeName] forKey:attributeName]; - } - - return dictionary; -} - - (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState { - if (aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); - - if (!_themeAttributes || !_themeAttributes[aName]) - [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; - var currentValue = [self currentValueForThemeAttribute:aName]; - [_themeAttributes[aName] setValue:aValue forState:aState]; + [super setValue:aValue forThemeAttribute:aName inState:aState]; if ([self currentValueForThemeAttribute:aName] === currentValue) return; @@ -3369,12 +3305,9 @@ setBoundsOrigin: - (void)setValue:(id)aValue forThemeAttribute:(CPString)aName { - if (!_themeAttributes || !_themeAttributes[aName]) - [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; - var currentValue = [self currentValueForThemeAttribute:aName]; - [_themeAttributes[aName] setValue:aValue]; + [super setValue:aValue forThemeAttribute:aName ]; if ([self currentValueForThemeAttribute:aName] === currentValue) return; @@ -3383,82 +3316,6 @@ setBoundsOrigin: [self setNeedsLayout]; } -- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState -{ - if (aState.isa && [aState isKindOfClass:CPArray]) - aState = CPThemeState.apply(null, aState); - - if (!_themeAttributes || !_themeAttributes[aName]) - [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; - - return [_themeAttributes[aName] valueForState:aState]; -} - -- (id)valueForThemeAttribute:(CPString)aName -{ - if (!_themeAttributes || !_themeAttributes[aName]) - [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; - - return [_themeAttributes[aName] value]; -} - -- (id)currentValueForThemeAttribute:(CPString)aName -{ - if (!_themeAttributes || !_themeAttributes[aName]) - [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; - - return [_themeAttributes[aName] valueForState:_themeState]; -} - -- (BOOL)hasThemeAttribute:(CPString)aName -{ - return (_themeAttributes && _themeAttributes[aName] !== undefined); -} - -/*! - Registers theme values encoded in an array at runtime. The format of the data in the array - is the same as that used by ThemeDescriptors.j, with the exception that you need to use - CPColorWithImages() in place of PatternColor(). For more information see the comments - at the top of ThemeDescriptors.j. - - @param themeValues array of theme values -*/ -- (void)registerThemeValues:(CPArray)themeValues -{ - for (var i = 0; i < themeValues.length; ++i) - { - var attributeValueState = themeValues[i], - attribute = attributeValueState[0], - value = attributeValueState[1], - state = attributeValueState[2]; - - if (state) - [self setValue:value forThemeAttribute:attribute inState:state]; - else - [self setValue:value forThemeAttribute:attribute]; - } -} - -/*! - Registers theme values encoded in an array at runtime. The format of the data in the array - is the same as that used by ThemeDescriptors.j, with the exception that you need to use - CPColorWithImages() in place of PatternColor(). The values in \c inheritedValues are - registered first, then those in \c themeValues override/augment the inherited values. - For more information see the comments at the top of ThemeDescriptors.j. - - @param themeValues array of base theme values - @param inheritedValues array of overridden/additional theme values -*/ -- (void)registerThemeValues:(CPArray)themeValues inherit:(CPArray)inheritedValues -{ - // Register inherited values first, then override those with the subtheme values. - if (inheritedValues) - [self registerThemeValues:inheritedValues]; - - if (themeValues) - [self registerThemeValues:themeValues]; -} - - (CPView)createEphemeralSubviewNamed:(CPString)aViewName { return nil; @@ -3517,6 +3374,225 @@ setBoundsOrigin: @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 setNeedsLayout:YES]; +} + +/*! @ignore +*/ +- (void)_recomputeAppearance +{ + 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]; + } + +// var start = [CPDate new]; + + for (var i = 0, size = [_subviews count]; i < size; i++) + { + [[_subviews objectAtIndex:i] _recomputeAppearance]; + } +// [_subviews makeObjectsPerformSelector:@selector(_recomputeAppearance)]; + +/* var now = [CPDate new]; + var elapsedSeconds = [now timeIntervalSinceReferenceDate] - [start timeIntervalSinceReferenceDate]; + + CPLog.trace(@"_recomputeAppearance " + [_subviews count] + " subviews in " + elapsedSeconds + @" seconds"); +*/} + + +@end + +@implementation CPView (TrackingAreaAdditions) + +- (void)addTrackingArea:(CPTrackingArea)trackingArea +{ + // Consistency check + if (!trackingArea || [_trackingAreas containsObjectIdenticalTo:trackingArea]) + return; + + if ([trackingArea view]) + [CPException raise:CPInternalInconsistencyException reason:"Tracking area has already been added to another view."]; + + [_trackingAreas addObject:trackingArea]; + [trackingArea setView:self]; + + if (_window) + [_window _addTrackingArea:trackingArea]; + + [trackingArea _updateWindowRect]; +} + +- (void)removeTrackingArea:(CPTrackingArea)trackingArea +{ + // Consistency check + if (!trackingArea) + return; + + if (![_trackingAreas containsObjectIdenticalTo:trackingArea]) + [CPException raise:CPInternalInconsistencyException reason:"Trying to remove unreferenced trackingArea"]; + + [self _removeTrackingArea:trackingArea]; +} + +/*! + Invoked automatically when the view’s geometry changes such that its tracking areas need to be recalculated. + + You should override this method to remove out of date tracking areas and add recomputed tracking areas; + + Cocoa calls this on every view, whereas they have tracking area(s) or not. + Cappuccino behaves differently : + - updateTrackingAreas is called when placing a view in the view hierarchy (that is in a window) + - if you have only CPTrackingInVisibleRect tracking areas attached to a view, it will not be called again (until you move the view in the hierarchy) + - if you have at least one non-CPTrackingInVisibleRect tracking area attached, it will be called every time the view geometry could be modified + You don't have to touch to CPTrackingInVisibleRect tracking areas, they will be automatically updated + + Please note that it is the owner of a tracking area who is called for updateTrackingAreas. + But, if a view without any tracking area is inserted in the view hierarchy (that is, in a window), the view is called for updateTrackingAreas. + This enables you to use updateTrackingArea to initially attach your tracking areas to the view. +*/ +- (void)updateTrackingAreas +{ + +} + +/*! + This utility method is intended for CPView subclasses overriding updateTrackingAreas + + Typical use would be : + + - (void)updateTrackingAreas + { + [self removeAllTrackingAreas]; + + ... add your specific updated tracking areas ... + } + +*/ +- (void)removeAllTrackingAreas +{ + while (_trackingAreas.length > 0) + [self _removeTrackingArea:_trackingAreas[0]]; +} + +// Internal methods + +- (void)_removeTrackingArea:(CPTrackingArea)trackingArea +{ + if (_window) + [_window _removeTrackingArea:trackingArea]; + + [trackingArea setView:nil]; + [_trackingAreas removeObjectIdenticalTo:trackingArea]; +} + +- (void)_updateTrackingAreas +{ + _inhibitUpdateTrackingAreas = YES; + + [self _recursivelyUpdateTrackingAreas]; + + _inhibitUpdateTrackingAreas = NO; +} + +- (void)_recursivelyUpdateTrackingAreas +{ + [self _updateTrackingAreasForOwners:[self _calcTrackingAreaOwners]]; + + for (var i = 0; i < _subviews.length; i++) + [_subviews[i] _recursivelyUpdateTrackingAreas]; +} + +- (CPArray)_calcTrackingAreaOwners +{ + // First search all owners that must be notified + // Remark: 99.99% of time, the only owner will be the view itself + // In the same time, update the rects of InVisibleRect tracking areas + + var owners = []; + + for (var i = 0; i < _trackingAreas.length; i++) + { + var trackingArea = _trackingAreas[i]; + + if ([trackingArea options] & CPTrackingInVisibleRect) + [trackingArea _updateWindowRect]; + + else + { + var owner = [trackingArea owner]; + + if (![owners containsObjectIdenticalTo:owner]) + [owners addObject:owner]; + } + } + + return owners; +} + +- (void)_updateTrackingAreasForOwners:(CPArray)owners +{ + for (var i = 0; i < owners.length; i++) + [owners[i] updateTrackingAreas]; +} + +@end + var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", CPViewAutoresizesSubviewsKey = @"CPViewAutoresizesSubviews", CPViewBackgroundColorKey = @"CPViewBackgroundColor", @@ -3529,15 +3605,15 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", CPViewSubviewsKey = @"CPViewSubviewsKey", CPViewSuperviewKey = @"CPViewSuperviewKey", CPViewTagKey = @"CPViewTagKey", - CPViewThemeClassKey = @"CPViewThemeClassKey", - CPViewThemeStateKey = @"CPViewThemeStateKey", CPViewWindowKey = @"CPViewWindowKey", CPViewNextKeyViewKey = @"CPViewNextKeyViewKey", CPViewPreviousKeyViewKey = @"CPViewPreviousKeyViewKey", CPReuseIdentifierKey = @"CPReuseIdentifierKey", CPViewScaleKey = @"CPViewScaleKey", CPViewSizeScaleKey = @"CPViewSizeScaleKey", - CPViewIsScaledKey = @"CPViewIsScaledKey"; + CPViewIsScaledKey = @"CPViewIsScaledKey", + CPViewAppearanceKey = @"CPViewAppearanceKey", + CPViewTrackingAreasKey = @"CPViewTrackingAreasKey"; @implementation CPView (CPCoding) @@ -3565,6 +3641,11 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", if (self) { + _trackingAreas = [aCoder decodeObjectForKey:CPViewTrackingAreasKey]; + + if (!_trackingAreas) + _trackingAreas = []; + // We have to manually check because it may be 0, so we can't use || _tag = [aCoder containsValueForKey:CPViewTagKey] ? [aCoder decodeIntForKey:CPViewTagKey] : -1; _identifier = [aCoder decodeObjectForKey:CPReuseIdentifierKey]; @@ -3634,23 +3715,9 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", [self setBackgroundColor:[aCoder decodeObjectForKey:CPViewBackgroundColorKey]]; [self _setupViewFlags]; + [self _decodeThemeObjectsWithCoder:aCoder]; - _theme = [CPTheme defaultTheme]; - _themeClass = [aCoder decodeObjectForKey:CPViewThemeClassKey]; - _themeState = CPThemeState([aCoder decodeObjectForKey:CPViewThemeStateKey]); - _themeAttributes = {}; - - var theClass = [self class], - themeClass = [self themeClass], - attributes = [theClass _themeAttributes], - count = attributes.length; - - while (count--) - { - var attributeName = attributes[count--]; - - _themeAttributes[attributeName] = CPThemeAttributeDecode(aCoder, attributeName, attributes[count], _theme, themeClass); - } + [self setAppearance:[aCoder decodeObjectForKey:CPViewAppearanceKey]]; [self setNeedsDisplay:YES]; [self setNeedsLayout]; @@ -3727,12 +3794,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask", if (previousKeyView !== nil && ![previousKeyView isEqual:self]) [aCoder encodeConditionalObject:previousKeyView forKey:CPViewPreviousKeyViewKey]; - [aCoder encodeObject:[self themeClass] forKey:CPViewThemeClassKey]; - [aCoder encodeObject:String(_themeState) forKey:CPViewThemeStateKey]; - - for (var attributeName in _themeAttributes) - if (_themeAttributes.hasOwnProperty(attributeName)) - CPThemeAttributeEncode(aCoder, _themeAttributes[attributeName]); + [self _encodeThemeObjectsWithCoder:aCoder]; if (_identifier) [aCoder encodeObject:_identifier forKey:CPReuseIdentifierKey]; @@ -3740,6 +3802,8 @@ 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]; + [aCoder encodeObject:_trackingAreas forKey:CPViewTrackingAreasKey]; } @end diff --git a/AppKit/CPVisualEffectView.j b/AppKit/CPVisualEffectView.j new file mode 100644 index 000000000..2618b611f --- /dev/null +++ b/AppKit/CPVisualEffectView.j @@ -0,0 +1,186 @@ +/* + * 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 setNeedsLayout:YES]; +} + +/*! 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 setNeedsLayout:YES]; +} + + +#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)layoutSubviews +{ + 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 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 f34e923a5..9c4880938 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -36,6 +36,7 @@ @import "CPResponder.j" @import "CPScreen.j" @import "CPText.j" +@import "CPTrackingArea.j" @import "CPView.j" @import "CPWindow_Constants.j" @import "_CPBorderlessBridgeWindowView.j" @@ -55,6 +56,7 @@ @class _CPWindowFrameAnimation @global CPApp +@global _CPPlatformWindowWillCloseNotification @typedef _CPWindowFullPlatformWindowSession @@ -196,7 +198,16 @@ var CPWindowActionMessageKeys = [ CPView _contentView; CPView _toolbarView; + BOOL _handlingTrackingAreaEvent; + BOOL _restartHandlingTrackingAreaEvent; + CPArray _previousMouseEnteredStack; + CPArray _previousCursorUpdateStack; CPArray _mouseEnteredStack; + CPArray _cursorUpdateStack; + CPArray _queuedEvents; + CPArray _trackingAreaViews; + id _activeCursorTrackingArea; + CPArray _queuedTrackingEvents; CPView _leftMouseDownView; CPView _rightMouseDownView; @@ -334,6 +345,17 @@ CPTexturedBackgroundWindowMask [self setLevel:CPNormalWindowLevel]; + _handlingTrackingAreaEvent = NO; + _restartHandlingTrackingAreaEvent = NO; + _trackingAreaViews = []; + _previousMouseEnteredStack = []; + _previousCursorUpdateStack = []; + _mouseEnteredStack = []; + _cursorUpdateStack = []; + _queuedEvents = []; + _queuedTrackingEvents = []; + _activeCursorTrackingArea = nil; + // Create our border view which is the actual root of our view hierarchy. _windowView = [[windowViewClass alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(_frame), CGRectGetHeight(_frame)) styleMask:aStyleMask]; @@ -556,6 +578,11 @@ CPTexturedBackgroundWindowMask } } +- (CPView)_windowView +{ + return _windowView; +} + /*! Sets the receiver as a full platform window. If you pass YES the CPWindow instance will fill the entire browser content area, otherwise the CPWindow will be a window inside of your browser window which the user can drag around, and resize (if you allow). @@ -1922,6 +1949,9 @@ CPTexturedBackgroundWindowMask _leftMouseDownView = nil; + // If mouseUp ends a drag operation, send delayed events for tracking views under the mouse, then flush delayed events + [self _flushTrackingEventQueueForMouseAt:point]; + return; case CPLeftMouseDown: @@ -1957,6 +1987,11 @@ CPTexturedBackgroundWindowMask case CPLeftMouseDragged: case CPRightMouseDragged: + // First, we search for any tracking area requesting CPTrackingEnabledDuringMouseDrag. + // At the same time, we update the entered stack. + [self _handleTrackingAreaEvent:anEvent]; + + // Normal mouseDragged workflow if (!_leftMouseDownView) return [[_windowView hitTest:point] mouseDragged:anEvent]; @@ -1975,61 +2010,12 @@ CPTexturedBackgroundWindowMask return [_leftMouseDownView performSelector:selector withObject:anEvent]; case CPMouseMoved: - [_windowView setCursorForLocation:point resizing:NO]; // Ignore mouse moves for parents of sheets if (!_acceptsMouseMovedEvents || sheet) return; - if (!_mouseEnteredStack) - _mouseEnteredStack = []; - - var hitTestView = [_windowView hitTest:point]; - - if ([_mouseEnteredStack count] && [_mouseEnteredStack lastObject] === hitTestView) - return [hitTestView mouseMoved:anEvent]; - - var view = hitTestView, - mouseEnteredStack = []; - - while (view) - { - mouseEnteredStack.unshift(view); - - view = [view superview]; - } - - var deviation = MIN(_mouseEnteredStack.length, mouseEnteredStack.length); - - while (deviation--) - if (_mouseEnteredStack[deviation] === mouseEnteredStack[deviation]) - break; - - var index = deviation + 1, - count = _mouseEnteredStack.length; - - if (index < count) - { - var event = [CPEvent mouseEventWithType:CPMouseExited location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]; - - for (; index < count; ++index) - [_mouseEnteredStack[index] mouseExited:event]; - } - - index = deviation + 1; - count = mouseEnteredStack.length; - - if (index < count) - { - var event = [CPEvent mouseEventWithType:CPMouseEntered location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]; - - for (; index < count; ++index) - [mouseEnteredStack[index] mouseEntered:event]; - } - - _mouseEnteredStack = mouseEnteredStack; - - [hitTestView mouseMoved:anEvent]; + [self _handleTrackingAreaEvent:anEvent]; } } @@ -2856,7 +2842,7 @@ CPTexturedBackgroundWindowMask if (delegate && endSelector) { if (_sheetContext["isAttached"]) - objj_msgSend(delegate, endSelector, _sheetContext["sheet"], _sheetContext["returnCode"], + delegate.isa.objj_msgSend3(delegate, endSelector, _sheetContext["sheet"], _sheetContext["returnCode"], _sheetContext["contextInfo"]); else _sheetContext["deferDidEndSelector"] = YES; @@ -2920,7 +2906,8 @@ CPTexturedBackgroundWindowMask _sheetContext = nil; sheet._parentView = nil; - objj_msgSend(delegate, selector, sheet, returnCode, contextInfo); + if (delegate != null) + delegate.isa.objj_msgSend3(delegate, selector, sheet, returnCode, contextInfo); } else { @@ -3842,6 +3829,460 @@ var interpolate = function(fromValue, toValue, progress) @end +@implementation CPWindow (TrackingAreaAdditions) + +- (void)_addTrackingAreaView:(CPView)aView +{ + var trackingAreas = [aView trackingAreas]; + + for (var i = 0; i < trackingAreas.length; i++) + [self _addTrackingArea:trackingAreas[i]]; +} + +- (void)_removeTrackingAreaView:(CPView)aView +{ + var trackingAreas = [aView trackingAreas]; + + for (var i = 0; i < trackingAreas.length; i++) + [self _removeTrackingArea:trackingAreas[i]]; +} + +- (void)_addTrackingArea:(CPTrackingArea)trackingArea +{ + var trackingAreaView = [trackingArea view]; + + if (![_trackingAreaViews containsObjectIdenticalTo:trackingAreaView]) + [_trackingAreaViews addObject:trackingAreaView]; + + // If CPTrackingAssumeInside option is set, insert the tracking area in the events management system + // in order to have the first event sent only when mouse leaves the tracking area + + [self _insertTrackingArea:trackingArea assumeInside:([trackingArea options] & CPTrackingAssumeInside)]; +} + +- (void)_removeTrackingArea:(CPTrackingArea)trackingArea +{ + // If mouse is in the tracking area, we remove it from the stack to avoid to fire a future mouseExited event + + [self _purgeTrackingArea:trackingArea]; + + var trackingAreaView = [trackingArea view]; + + [_trackingAreaViews removeObjectIdenticalTo:trackingAreaView]; +} + +- (void)_insertTrackingArea:(CPTrackingArea)trackingArea assumeInside:(BOOL)assumeInside +{ + if (_handlingTrackingAreaEvent) + _restartHandlingTrackingAreaEvent = YES; + + if (assumeInside) + { + if (_handlingTrackingAreaEvent) + [_mouseEnteredStack addObject:trackingArea]; + else + [_previousMouseEnteredStack addObject:trackingArea]; + } +} + +- (void)_purgeTrackingArea:(CPTrackingArea)trackingArea +{ + if (_handlingTrackingAreaEvent) + { + [_mouseEnteredStack removeObjectIdenticalTo:trackingArea]; + + var i = _queuedEvents.length; + + while (i--) + if ([_queuedEvents[i] trackingArea] === trackingArea) + [_queuedEvents removeObjectAtIndex:i]; + + _cursorUpdateStack = []; + _activeCursorTrackingArea = nil; + } + else + { + [_previousMouseEnteredStack removeObjectIdenticalTo:trackingArea]; + [_previousCursorUpdateStack removeObjectIdenticalTo:trackingArea]; + } +} + +- (void)_handleTrackingAreaEvent:(CPEvent)anEvent +{ + _handlingTrackingAreaEvent = YES; + + var point = [anEvent locationInWindow], + dragging = ([anEvent type] !== CPMouseMoved); + + do + { + // Initialize this run + _restartHandlingTrackingAreaEvent = NO; + + _mouseEnteredStack = []; + _cursorUpdateStack = []; + + // Important remark: we must queue events to avoid running conditions when a view uses a mouse event to modify view hierarchy + + _queuedEvents = []; + + // Handle mouse entering tracking areas (and calc _mouseEnteredStack and _cursorUpdateStack) + + [self _handleMouseMovedAndEnteredEventsForEvent:anEvent atPoint:point dragging:dragging]; + + // Handle mouse exiting tracking areas + + [self _handleMouseExitedEventsForEvent:anEvent atPoint:point dragging:dragging]; + + // Cursor update + + if (_cursorUpdateStack.length > 0) + { + [self _handleCursorUpdateEventsForEvent:anEvent atPoint:point dragging:dragging]; + } + else if (!dragging) + { + // Here, we are outside the window content view tracking area, so let _windowView set the cursor (resize cursor, ...) + + [_windowView setCursorForLocation:point resizing:NO]; + _activeCursorTrackingArea = nil; + } + + // Send all queued events + // Important remark : as an event can modify the view hierarchy, the events queue could be modified while processing it + + while (_queuedEvents.length > 0) + { + var queuedEvent = _queuedEvents[0], + trackingArea = [queuedEvent trackingArea], + trackingOwner = [trackingArea owner]; + + switch ([queuedEvent type]) + { + case CPMouseEntered: + [trackingOwner mouseEntered:queuedEvent]; + break; + + case CPMouseExited: + [trackingOwner mouseExited:queuedEvent]; + break; + + case CPCursorUpdate: + [trackingOwner cursorUpdate:queuedEvent]; + break; + } + + if (queuedEvent === _queuedEvents[0]) + [_queuedEvents removeObjectAtIndex:0]; + } + + // Prepare for next call + + _previousMouseEnteredStack = _mouseEnteredStack; + _previousCursorUpdateStack = _cursorUpdateStack; + } + while (_restartHandlingTrackingAreaEvent) + + _handlingTrackingAreaEvent = NO; +} + +- (void)_handleMouseMovedAndEnteredEventsForEvent:(CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging +{ + var isKeyWindow = [self isKeyWindow]; + + for (var i = 0; i < _trackingAreaViews.length; i++) + { + var aView = _trackingAreaViews[i], + trackingAreas = [aView trackingAreas]; + + if ([aView isHidden]) + continue; + + for (var j = 0; j < trackingAreas.length; j++) + { + var aTrackingArea = trackingAreas[j], + trackingOptions = [aTrackingArea options], + trackingImplementedMethods = [aTrackingArea implementedOwnerMethods]; + + if (!(((trackingOptions & CPTrackingActiveAlways) || + (trackingOptions & CPTrackingActiveInActiveApp) || + ((trackingOptions & CPTrackingActiveInKeyWindow) && isKeyWindow) || + ((trackingOptions & CPTrackingActiveWhenFirstResponder) && isKeyWindow && (_firstResponder === aView))) && + (CGRectContainsPoint([aTrackingArea windowRect], point)))) + { + continue; + } + + [_mouseEnteredStack addObject:aTrackingArea]; + + if ([_previousMouseEnteredStack containsObjectIdenticalTo:aTrackingArea]) + { + // Mouse was already in this rect so it's a mouseMoved + + if (!dragging && (trackingOptions & CPTrackingMouseMoved) && (trackingImplementedMethods & CPTrackingOwnerImplementsMouseMoved)) + [[aTrackingArea owner] mouseMoved:anEvent]; + } + else if ((trackingOptions & CPTrackingMouseEnteredAndExited) && (trackingImplementedMethods & CPTrackingOwnerImplementsMouseEntered)) + { + var mouseEnteredEvent = [CPEvent enterExitEventWithType:CPMouseEntered + location:point + modifierFlags:[anEvent modifierFlags] + timestamp:[anEvent timestamp] + windowNumber:_windowNumber + context:nil + eventNumber:-1 + trackingArea:aTrackingArea]; + + if (dragging && !(trackingOptions & CPTrackingEnabledDuringMouseDrag)) + [self _queueTrackingEvent:mouseEnteredEvent]; + else + [_queuedEvents addObject:mouseEnteredEvent]; + } + + if ((trackingOptions & CPTrackingCursorUpdate) && (trackingImplementedMethods & CPTrackingOwnerImplementsCursorUpdate)) + [_cursorUpdateStack addObject:aTrackingArea]; + } + } +} + +- (void)_handleMouseExitedEventsForEvent:(CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging +{ + // Search for exited views (were in _previousMouseEnteredStack but no more in _mouseEnteredStack) + + for (var i = 0; i < _previousMouseEnteredStack.length; i++) + { + var aTrackingArea = _previousMouseEnteredStack[i], + trackingOptions = [aTrackingArea options]; + + if ([_mouseEnteredStack containsObjectIdenticalTo:aTrackingArea]) + continue; + + // Mouse is no more in this area so it's a mouseExited + + if ((trackingOptions & CPTrackingMouseEnteredAndExited) && ([aTrackingArea implementedOwnerMethods] & CPTrackingOwnerImplementsMouseExited)) + { + var theView = [aTrackingArea owner], + mouseExitedEvent = [CPEvent enterExitEventWithType:CPMouseExited + location:point + modifierFlags:[anEvent modifierFlags] + timestamp:[anEvent timestamp] + windowNumber:_windowNumber + context:nil + eventNumber:-1 + trackingArea:aTrackingArea]; + + if (dragging && !(trackingOptions & CPTrackingEnabledDuringMouseDrag)) + [self _queueTrackingEvent:mouseExitedEvent]; + else + [_queuedEvents addObject:mouseExitedEvent]; + } + + // If this is the active cursor area, we reset _previousCursorUpdateStack so a new active area will be computed + + if (aTrackingArea === _activeCursorTrackingArea) + { + _previousCursorUpdateStack = []; + _activeCursorTrackingArea = nil; + } + } +} + +- (void)_handleCursorUpdateEventsForEvent:(CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging +{ + var overlappingTrackingAreas = []; + + for (var i = 0; i < _cursorUpdateStack.length; i++) + { + var aTrackingArea = _cursorUpdateStack[i]; + + if ((![_previousCursorUpdateStack containsObjectIdenticalTo:aTrackingArea]) || (aTrackingArea === _activeCursorTrackingArea)) + [overlappingTrackingAreas addObject:aTrackingArea]; + } + + var frontmostTrackingArea = overlappingTrackingAreas[0], + frontmostView = [frontmostTrackingArea view]; + + for (var i = 1; i < overlappingTrackingAreas.length; i++) + { + var aTrackingArea = overlappingTrackingAreas[i], + aView = [aTrackingArea view]; + + // First, if aView is _windowView, skip to next overlapping tracking area + // as _windowView can't be the frontmost view if there's multiple overlapping tracking areas. + + if (aView === _windowView) + continue; + + // Then, if frontmostView is _windowView, aView must become frontmostView + + if (frontmostView === _windowView) + { + frontmostTrackingArea = aTrackingArea; + frontmostView = aView; + + continue; + } + + // Next verify if aView is a subview of frontmostView + // If so, it's our new frontmost view + + var searchingView = aView; + + while ((searchingView !== _contentView) && ([searchingView superview] !== frontmostView)) + searchingView = [searchingView superview]; + + if (searchingView !== _contentView) + { + frontmostTrackingArea = aTrackingArea; + frontmostView = aView; + + continue; + } + + // aView is not a subview of frontmostView + // Search in view hierarchy which one will be over the other + // (this is done by comparing their draw order) + + var firstView = frontmostView, + firstSuperview = [firstView superview]; + + while (firstView !== _contentView) + { + var secondView = aView, + secondSuperview = [secondView superview]; + + while ((secondSuperview !== _contentView) && (firstSuperview !== secondSuperview)) + { + secondView = secondSuperview; + secondSuperview = [secondView superview]; + } + + if (firstSuperview === secondSuperview) + break; + + firstView = firstSuperview; + firstSuperview = [firstView superview]; + } + + if (firstSuperview !== secondSuperview) + [CPException raise:CPInternalInconsistencyException reason:"Problem with view hierarchy"]; + + var firstSuperviewSubviews = [firstSuperview subviews], + firstViewIndex = [firstSuperviewSubviews indexOfObject:firstView], + secondViewIndex = [firstSuperviewSubviews indexOfObject:secondView]; + + if (secondViewIndex > firstViewIndex) + { + frontmostTrackingArea = aTrackingArea; + frontmostView = aView; + } + } + + if (frontmostTrackingArea !== _activeCursorTrackingArea) + { + var cursorUpdateEvent = [CPEvent enterExitEventWithType:CPCursorUpdate + location:point + modifierFlags:[anEvent modifierFlags] + timestamp:[anEvent timestamp] + windowNumber:_windowNumber + context:nil + eventNumber:-1 + trackingArea:frontmostTrackingArea]; + + if (dragging) + [self _queueTrackingEvent:cursorUpdateEvent]; + else + [_queuedEvents addObject:cursorUpdateEvent]; + + _activeCursorTrackingArea = frontmostTrackingArea; + } +} + +- (void)_queueTrackingEvent:(CPEvent)anEvent +{ + // This will put a tracking event in the _queuedTrackingEvents queue. + // + // We optimize this queue with this policy : + // - if mouseEntered, search if queue contains a previous mouseExited for the same tracking area. If so, discard both. + // - if mouseExited, search if queue contains a previous mouseEntered for the same tracking area. If so, discard both. + // + // This is not Cocoa way of doing as it would send every event. + // But final result should be the same. + + var eventType = [anEvent type], + trackingArea = [anEvent trackingArea]; + + switch ([anEvent type]) + { + case CPMouseEntered: + for (var i = 0; i < _queuedTrackingEvents.length; i++) + { + var queuedEvent = _queuedTrackingEvents[i]; + + if (([queuedEvent trackingArea] === trackingArea) && ([queuedEvent type] === CPMouseExited)) + { + [_queuedTrackingEvents removeObjectAtIndex:i]; + return; + } + } + + [_queuedTrackingEvents addObject:anEvent]; + break; + + case CPMouseExited: + for (var i = 0; i < _queuedTrackingEvents.length; i++) + { + var queuedEvent = _queuedTrackingEvents[i]; + + if (([queuedEvent trackingArea] === trackingArea) && ([queuedEvent type] === CPMouseEntered)) + { + [_queuedTrackingEvents removeObjectAtIndex:i]; + return; + } + } + + [_queuedTrackingEvents addObject:anEvent]; + break; + + case CPCursorUpdate: + [_queuedTrackingEvents addObject:anEvent]; + break; + } +} + +- (void)_flushTrackingEventQueueForMouseAt:(CGPoint)point +{ + for (var i = 0; i < _queuedTrackingEvents.length; i++) + { + var queuedEvent = _queuedTrackingEvents[i], + trackingArea = [queuedEvent trackingArea], + trackingOwner = [trackingArea owner]; + + switch ([queuedEvent type]) + { + case CPMouseEntered: + [trackingOwner mouseEntered:queuedEvent]; + break; + + case CPMouseExited: + [trackingOwner mouseExited:queuedEvent]; + break; + + case CPCursorUpdate: + [trackingOwner updateTrackingAreas]; + + if (CGRectContainsPoint([trackingArea windowRect], point)) + [trackingOwner cursorUpdate:queuedEvent]; + + break; + } + } + + _queuedTrackingEvents = []; +} + +@end + function _CPWindowFullPlatformWindowSessionMake(aWindowView, aContentRect, hasShadow, aLevel) { return { windowView:aWindowView, contentRect:aContentRect, hasShadow:hasShadow, level:aLevel }; 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/CPWindow/_CPWindowView.j b/AppKit/CPWindow/_CPWindowView.j index 0ffd01121..6e4127928 100644 --- a/AppKit/CPWindow/_CPWindowView.j +++ b/AppKit/CPWindow/_CPWindowView.j @@ -353,7 +353,9 @@ _CPWindowViewResizeSlop = 3; if ([theWindow isFullPlatformWindow] || !(_styleMask & CPResizableWindowMask) || (CPWindowResizeStyle !== CPWindowResizeStyleModern)) + { return; + } var globalPoint = [theWindow convertBaseToGlobal:aPoint], resizeRegion = isResizing ? _resizeRegion : [self resizeRegionForPoint:globalPoint], @@ -969,3 +971,18 @@ _CPWindowViewResizeSlop = 3; } @end + +@implementation _CPWindowView (TrackingAreaAdditions) + +- (void)updateTrackingAreas +{ + [self removeAllTrackingAreas]; + + [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:[self contentRectForFrameRect:[self frame]] + options:CPTrackingCursorUpdate | CPTrackingActiveInActiveApp + owner:self + userInfo:nil]]; +} + +@end + diff --git a/AppKit/Cib/CPCib.j b/AppKit/Cib/CPCib.j index 12c9611af..64ec7d981 100644 --- a/AppKit/Cib/CPCib.j +++ b/AppKit/Cib/CPCib.j @@ -32,6 +32,7 @@ @import "_CPCibObjectData.j" @import "_CPCibProxyObject.j" @import "_CPCibWindowTemplate.j" +@import "_CPLocalizableString.j" CPCibOwner = @"CPCibOwner"; CPCibTopLevelObjects = @"CPCibTopLevelObjects"; @@ -46,10 +47,11 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; @implementation CPCib : CPObject { - CPData _data; - CPBundle _bundle; - BOOL _awakenCustomResources; + BOOL _awakenCustomResources @accessors(property=_awakenCustomResources); + CPBundle _bundle; + CPData _data; + CPString _cibName; id _loadDelegate; } @@ -59,6 +61,8 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; if (self) { + _cibName = [aURL lastPathComponent]; + _data = [CPURLConnection sendSynchronousRequest:[CPURLRequest requestWithURL:aURL] returningResponse:nil]; if (!_data) @@ -76,6 +80,8 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; if (self) { + _cibName = [aURL lastPathComponent]; + [CPURLConnection connectionWithRequest:[CPURLRequest requestWithURL:aURL] delegate:self]; _awakenCustomResources = YES; @@ -92,7 +98,9 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; aName = [aName stringByAppendingString:@".cib"]; // If aBundle is nil, use mainBundle, but ONLY for searching for the nib, not for resources later. - self = [self initWithContentsOfURL:[aBundle || [CPBundle mainBundle] pathForResource:aName]]; + var bundle = aBundle || [CPBundle mainBundle]; + + self = [self initWithContentsOfURL:[bundle _cibPathForResource:aName]]; if (self) _bundle = aBundle; @@ -106,7 +114,9 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; aName = [aName stringByAppendingString:@".cib"]; // If aBundle is nil, use mainBundle, but ONLY for searching for the nib, not for resources later. - self = [self initWithContentsOfURL:[aBundle || [CPBundle mainBundle] pathForResource:aName] loadDelegate:aLoadDelegate]; + var bundle = aBundle || [CPBundle mainBundle]; + + self = [self initWithContentsOfURL:[bundle _cibPathForResource:aName] loadDelegate:aLoadDelegate]; if (self) _bundle = aBundle; @@ -114,16 +124,6 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; return self; } -- (void)_setAwakenCustomResources:(BOOL)shouldAwakenCustomResources -{ - _awakenCustomResources = shouldAwakenCustomResources; -} - -- (BOOL)_awakenCustomResources -{ - return _awakenCustomResources; -} - - (BOOL)instantiateCibWithExternalNameTable:(CPDictionary)anExternalNameTable { var bundle = _bundle, @@ -132,7 +132,7 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; if (!bundle && owner) bundle = [CPBundle bundleForClass:[owner class]]; - var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:bundle awakenCustomResources:_awakenCustomResources], + var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:bundle awakenCustomResources:_awakenCustomResources cibName:_cibName], replacementClasses = [anExternalNameTable objectForKey:CPCibReplacementClasses]; if (replacementClasses) @@ -226,4 +226,4 @@ var CPCibDataFileKey = @"CPCibDataFileKey", [aCoder encodeObject:[_data base64] forKey:CPCibDataFileKey]; } -@end +@end \ No newline at end of file diff --git a/AppKit/Cib/CPCibLoading.j b/AppKit/Cib/CPCibLoading.j index 91ae95ed3..7c346dd95 100644 --- a/AppKit/Cib/CPCibLoading.j +++ b/AppKit/Cib/CPCibLoading.j @@ -26,7 +26,11 @@ @import "CPCib.j" -var CPCibOwner = @"CPCibOwner"; +var CPCibOwner = @"CPCibOwner", + CPBundleDefaultLanguage = @"CPBundleDefaultLanguage", + CPBundleTypeOfLocalization = @"CPBundleTypeOfLocalization", + CPBundleBaseLocalizationType = @"CPBundleBaseLocalizationType", + CPBundleInterfaceBuilderLocalizationType = @"CPBundleInterfaceBuilderLocalizationType"; @implementation CPObject (CPCibLoading) @@ -45,14 +49,7 @@ var CPCibOwner = @"CPCibOwner"; + (CPCib)loadCibNamed:(CPString)aName owner:(id)anOwner { - if (![aName hasSuffix:@".cib"]) - aName = [aName stringByAppendingString:@".cib"]; - - // Path is based solely on anOwner: - var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle], - path = [bundle pathForResource:aName]; - - return [self loadCibFile:path externalNameTable:@{ CPCibOwner: anOwner }]; + return [self loadCibFile:[self _cibPathForName:aName withOwner:anOwner] externalNameTable:@{ CPCibOwner: anOwner }]; } - (CPCib)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable @@ -71,14 +68,7 @@ var CPCibOwner = @"CPCibOwner"; + (CPCib)loadCibNamed:(CPString)aName owner:(id)anOwner loadDelegate:(id)aDelegate { - if (![aName hasSuffix:@".cib"]) - aName = [aName stringByAppendingString:@".cib"]; - - // Path is based solely on anOwner: - var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle], - path = [bundle pathForResource:aName]; - - return [self loadCibFile:path externalNameTable:@{ CPCibOwner: anOwner } loadDelegate:aDelegate]; + return [self loadCibFile:[self _cibPathForName:aName withOwner:anOwner] externalNameTable:@{ CPCibOwner: anOwner } loadDelegate:aDelegate]; } - (CPCib)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable loadDelegate:(id)aDelegate @@ -91,6 +81,30 @@ var CPCibOwner = @"CPCibOwner"; externalNameTable:aNameTable]]); } +- (CPString)_cibPathForResource:(CPString)aName +{ + var defaultBundleLanguage = [self objectForInfoDictionaryKey:CPBundleDefaultLanguage], + typeOfLocalization = [self objectForInfoDictionaryKey:CPBundleTypeOfLocalization]; + + if (defaultBundleLanguage && (!typeOfLocalization || typeOfLocalization == CPBundleBaseLocalizationType)) + aName = @"Base.lproj/" + aName; + else if (defaultBundleLanguage && typeOfLocalization == CPBundleInterfaceBuilderLocalizationType) + aName = _bundle.loadedLanguage() + ".lproj/" + aName; + + return [self pathForResource:aName]; +} + ++ (CPString)_cibPathForName:(CPString)aName withOwner:(id)anOwner +{ + if (![aName hasSuffix:@".cib"]) + aName = [aName stringByAppendingString:@".cib"]; + + // Path is based solely on anOwner: + var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle]; + + return [bundle _cibPathForResource:aName]; +} + @end @implementation _CPCibLoadDelegate : CPObject diff --git a/AppKit/Cib/_CPCibKeyedUnarchiver.j b/AppKit/Cib/_CPCibKeyedUnarchiver.j index bdb88d1a0..e68c63ce2 100644 --- a/AppKit/Cib/_CPCibKeyedUnarchiver.j +++ b/AppKit/Cib/_CPCibKeyedUnarchiver.j @@ -21,16 +21,22 @@ */ @import - +@import @implementation _CPCibKeyedUnarchiver : CPKeyedUnarchiver { - CPBundle _bundle; - BOOL _awakenCustomResources; - CPDictionary _externalObjectsForProxyIdentifiers; + BOOL _awakenCustomResources @accessors(getter=awakenCustomResources); + CPBundle _bundle @accessors(getter=bundle); + CPDictionary _externalObjectsForProxyIdentifiers @accessors(setter=setExternalObjectsForProxyIdentifiers:); + CPString _cibName @accessors(getter=cibName); } - (id)initForReadingWithData:(CPData)data bundle:(CPBundle)aBundle awakenCustomResources:(BOOL)shouldAwakenCustomResources +{ + return [self initForReadingWithData:data bundle:aBundle awakenCustomResources:shouldAwakenCustomResources cibName:@""]; +} + +- (id)initForReadingWithData:(CPData)data bundle:(CPBundle)aBundle awakenCustomResources:(BOOL)shouldAwakenCustomResources cibName:(CPString)aCibName { self = [super initForReadingWithData:data]; @@ -38,6 +44,7 @@ { _bundle = aBundle; _awakenCustomResources = shouldAwakenCustomResources; + _cibName = aCibName; [self setDelegate:self]; } @@ -45,21 +52,6 @@ return self; } -- (CPBundle)bundle -{ - return _bundle; -} - -- (BOOL)awakenCustomResources -{ - return _awakenCustomResources; -} - -- (void)setExternalObjectsForProxyIdentifiers:(CPDictionary)externalObjectsForProxyIdentifiers -{ - _externalObjectsForProxyIdentifiers = externalObjectsForProxyIdentifiers; -} - - (id)externalObjectForProxyIdentifier:(CPString)anIdentifier { return [_externalObjectsForProxyIdentifiers objectForKey:anIdentifier]; diff --git a/AppKit/Cib/_CPLocalizableString.j b/AppKit/Cib/_CPLocalizableString.j new file mode 100644 index 000000000..dca7608bb --- /dev/null +++ b/AppKit/Cib/_CPLocalizableString.j @@ -0,0 +1,62 @@ +/* + * _CPLocalizableString.j + * AppKit + * + * Created by Alexandre Wilhelm. + * 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 + +@implementation _CPLocalizableString : CPObject +{ + CPString _dev @accessors(property=dev); + CPString _key @accessors(property=key); + CPString _value @accessors(property=value); +} + +@end + + +var CPLocalizableStringDev = @"CPLocalizableStringDev", + CPLocalizableStringKey = @"CPLocalizableStringKey", + CPLocalizableStringValue = @"CPLocalizableStringValue"; + +@implementation _CPLocalizableString (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + [self init]; + + _dev = [aCoder decodeObjectForKey:CPLocalizableStringDev]; + _key = [aCoder decodeObjectForKey:CPLocalizableStringKey]; + _value = [aCoder decodeObjectForKey:CPLocalizableStringValue]; + + var tableName = [[aCoder cibName] stringByTrimmingCharactersInSet:[CPCharacterSet characterSetWithCharactersInString:@".cib"]]; + + return [[aCoder bundle] localizedStringForKey:_key value:_value table:tableName]; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_dev forKey:CPLocalizableStringDev]; + [aCoder encodeObject:_key forKey:CPLocalizableStringKey]; + [aCoder encodeObject:_value forKey:CPLocalizableStringValue]; +} + +@end \ No newline at end of file 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..b5aeb5434 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; @@ -35,8 +33,9 @@ appKitTask = framework ("AppKit", function(appKitTask) return "--include \"" + aFilename + "\""; }).join(" "); - if ($CONFIGURATION === "Release") - appKitTask.setCompilerFlags("-O " + INCLUDES); + if ($CONFIGURATION === "Release") { + appKitTask.setCompilerFlags("-O2 " + INCLUDES); + } else appKitTask.setCompilerFlags("-DDEBUG -g " + INCLUDES); }); diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index fb742b351..f73c9205f 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -121,6 +121,8 @@ var PrimaryPlatformWindow = NULL; _windowLayers = @{}; _charCodes = {}; + + _platformPasteboard = [CPPlatformPasteboard new]; #endif } @@ -213,7 +215,7 @@ var PrimaryPlatformWindow = NULL; - (BOOL)isVisible { #if PLATFORM(DOM) - return _DOMWindow !== NULL; + return _DOMWindow !== NULL && _DOMWindow !== undefined; #else return NO; #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/CPPlatformString.j b/AppKit/Platform/DOM/CPPlatformString.j index 1e520dd7f..844eeea3e 100644 --- a/AppKit/Platform/DOM/CPPlatformString.j +++ b/AppKit/Platform/DOM/CPPlatformString.j @@ -129,6 +129,33 @@ var DOMFixedWidthSpanElement = nil, DOMMetricsDivElement.appendChild(DOMMetricsImgElement); } ++ (int)charPositionOfString:(CPString)aString withFont:(CPFont)aFont forPoint:(CGPoint)aPoint +{ + if (!aString) + return 0; + + var position = 0, + stringLength = aString.length, + currentString = ""; + + for (var i = 0; i < stringLength; i++) + { + var lastChar = aString[i]; + + currentString += lastChar; + + var sizeOfString = [self sizeOfString:currentString withFont:aFont forWidth:nil].width, + sizeLastChar = [self sizeOfString:lastChar withFont:aFont forWidth:nil].width; + + if (sizeOfString - sizeLastChar / 2 < aPoint.x) + position++; + else + break; + } + + return position; +} + + (CGSize)sizeOfString:(CPString)aString withFont:(CPFont)aFont forWidth:(float)aWidth { if (!DOMFixedWidthSpanElement) diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index fa6dd7ec8..fa54e8892 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -365,6 +365,7 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _DOMBodyElement.style["-khtml-user-select"] = "none"; _DOMBodyElement.webkitTouchCallout = "none"; + _DOMBodyElement.style[CPBrowserStyleProperty(@"user-select")] = @"none"; [self createDOMElements]; [self _addLayers]; @@ -567,6 +568,9 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio _DOMWindow = window.open("about:blank", "_blank", "menubar=no,location=no,resizable=yes,scrollbars=no,status=no,left=" + CGRectGetMinX(_contentRect) + ",top=" + CGRectGetMinY(_contentRect) + ",width=" + CGRectGetWidth(_contentRect) + ",height=" + CGRectGetHeight(_contentRect)); + if (!_DOMWindow) + return; + [PlatformWindows addObject:self]; // FIXME: cpSetFrame? @@ -1413,6 +1417,9 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio - (void)order:(CPWindowOrderingMode)orderingMode window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow { + if (!_DOMWindow) + return; + [CPPlatform initializeScreenIfNecessary]; // Grab the appropriate level for the layer, and create it if @@ -1850,11 +1857,10 @@ function CPWindowObjectList() function CPWindowList() { - var windowObjectList = CPWindowObjectList(), - windowList = []; + var windowObjectList = CPWindowObjectList(); - for (var i = 0, count = [windowObjectList count]; i < count; i++) - windowList.push([windowObjectList[i] windowNumber]); - - return windowList; + return [windowObjectList arrayByApplyingBlock:function(windowObject) + { + return [windowObject windowNumber]; + }]; } diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 0c4445137..31bd445ac 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -384,6 +384,19 @@ var themedButtonValues = nil, "themedTokenFieldTokenCloseButton"]; } ++ (CPColor)themedColor +{ + var color = [CPColor blackColor], + themedColorValues = + [ + [@"alternate-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]], + [@"secondary-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]] + ]; + + [self registerThemeValues:themedColorValues forObject:color]; + + return color; +} + (CPButton)makeButton { @@ -2999,6 +3012,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 bd00d166f..ee6917791 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -28,6 +28,7 @@ @import @import @import +@import @import @import @import @@ -96,7 +97,22 @@ var themedButtonValues = nil, "themedRuleEditor", "themedTableDataView", "themedCornerview", - "themedTokenFieldTokenCloseButton"]; + "themedTokenFieldTokenCloseButton", + "themedColor"]; +} + ++ (CPColor)themedColor +{ + var color = [CPColor redColor], + themedColorValues = + [ + [@"alternate-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]], + [@"secondary-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]] + ]; + + [self registerThemeValues:themedColorValues forObject:color]; + + return color; } + (CPButton)makeButton @@ -310,7 +326,7 @@ var themedButtonValues = nil, var button = [self button]; [button setTitle:@"OK"]; - [button setThemeState:[CPButtonStateBezelStyleRounded, CPThemeStateDefault]]; + [button setThemeStates:[CPButtonStateBezelStyleRounded, CPThemeStateDefault]]; return button; } @@ -688,7 +704,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]], @@ -2499,6 +2516,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/Themes/BlendKit/BKThemeDescriptor.j b/AppKit/Themes/BlendKit/BKThemeDescriptor.j index 522050def..1512c480e 100644 --- a/AppKit/Themes/BlendKit/BKThemeDescriptor.j +++ b/AppKit/Themes/BlendKit/BKThemeDescriptor.j @@ -217,6 +217,11 @@ var ItemSizes = { }, return [[self themeName] compare:[aThemeDescriptor themeName]]; } ++ (void)registerThemeValues:(CPArray)themeValues forObject:(id)anObject +{ + [self registerThemeValues:themeValues forView:anObject]; +} + + (void)registerThemeValues:(CPArray)themeValues forView:(CPView)aView { for (var i = 0; i < themeValues.length; ++i) @@ -227,12 +232,22 @@ var ItemSizes = { }, state = attributeValueState[2]; if (state) - [aView setValue:value forThemeAttribute:attribute inState:state]; + { + if (state.isa && [state isKindOfClass:CPArray]) + [aView setValue:value forThemeAttribute:attribute inStates:state]; + else + [aView setValue:value forThemeAttribute:attribute inState:state]; + } else [aView setValue:value forThemeAttribute:attribute]; } } ++ (void)registerThemeValues:(CPArray)themeValues forObject:(id)anObject inherit:(CPArray)inheritedValues +{ + [self registerThemeValues:themeValues forView:anObject inherit:inheritedValues]; +} + + (void)registerThemeValues:(CPArray)themeValues forView:(CPView)aView inherit:(CPArray)inheritedValues { // Register inherited values first, then override those with the subtheme values. @@ -294,7 +309,12 @@ var ItemSizes = { }, } if (state) - [aView setValue:value forThemeAttribute:attribute inState:state]; + { + if (state.isa && [state isKindOfClass:CPArray]) + [aView setValue:value forThemeAttribute:attribute inStates:state]; + else + [aView setValue:value forThemeAttribute:attribute inState:state]; + } else [aView setValue:value forThemeAttribute:attribute]; } diff --git a/AppKit/Themes/BlendKit/Jakefile b/AppKit/Themes/BlendKit/Jakefile index da9439c09..540297c1a 100644 --- a/AppKit/Themes/BlendKit/Jakefile +++ b/AppKit/Themes/BlendKit/Jakefile @@ -20,7 +20,7 @@ blendKitTask = framework ("BlendKit", function(blendKitTask) blendKitTask.setFlattensSources(true); // FIXME: how do we non flatten? if ($CONFIGURATION === "Release") - blendKitTask.setCompilerFlags("-O"); + blendKitTask.setCompilerFlags("-O2"); else blendKitTask.setCompilerFlags("-DDEBUG -g"); }); diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index cf25c025d..f1b3ecb41 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -171,9 +171,9 @@ var _CPAutocompleteMenuMaximumHeight = 307; var dataView = [tableColumn dataView], fontNormal = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView], - fontSelected = [dataView valueForThemeAttribute:@"font" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]], + fontSelected = [dataView valueForThemeAttribute:@"font" inStates:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]], contentInsetNormal = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView], - contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]]; + contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inStates:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]]; var mergedString = contentArray.join("\n"); diff --git a/AppKit/_CPObject+Theme.j b/AppKit/_CPObject+Theme.j new file mode 100644 index 000000000..20f32da85 --- /dev/null +++ b/AppKit/_CPObject+Theme.j @@ -0,0 +1,480 @@ +/* + * AppKit.j + * AppKit + * + * Created by Alexandre Wilhelm. + * + * 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" + +var CPViewThemeClassKey = @"CPViewThemeClassKey", + CPViewThemeStateKey = @"CPViewThemeStateKey"; + +@protocol CPTheme + +- (CPString)themeClass; +- (void)setThemeClass:(CPString)theClass; + +- (CPTheme)theme; +- (void)setTheme:(CPTheme)aTheme; + +- (unsigned)themeState; +- (BOOL)hasThemeState:(ThemeState)aState; +- (BOOL)hasThemeStates:(CPArray)states; +- (BOOL)setThemeState:(ThemeState)aState; +- (BOOL)setThemeStates:(CPArray)aState; +- (BOOL)unsetThemeState:(ThemeState)aState; +- (BOOL)unsetThemeStates:(CPArray)aState; +- (BOOL)hasThemeAttribute:(CPString)aName; + +- (void)objectDidChangeTheme; + +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState; +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName; +- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState; +- (id)valueForThemeAttribute:(CPString)aName; +- (id)currentValueForThemeAttribute:(CPString)aName; +- (void)registerThemeValues:(CPArray)themeValues; +- (void)registerThemeValues:(CPArray)themeValues inherit:(CPArray)inheritedValues; + +@end + +@implementation CPObject (ObjectTheming) +{ + // Theming Support + CPTheme _theme; + CPString _themeClass; + JSObject _themeAttributes; + unsigned _themeState; +} + + +#pragma mark - +#pragma mark Theme State + +- (unsigned)themeState +{ + return _themeState; +} + +- (BOOL)hasThemeState:(ThemeState)aState +{ +#if DEBUG +// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as +// the preformance cost for this check is to high. We should remove this check in a future release. + if (aState && aState.isa && [aState isKindOfClass:CPArray]) + [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'hasThemeStates: instead: " + aState]; +#endif + + return _themeState.hasThemeState(aState); +} + +- (BOOL)hasThemeStates:(CPArray)states +{ + var i = [states count], + aState = [states objectAtIndex:--i]; + + while (i > 0) + aState = aState.and([states objectAtIndex:--i]); + + return _themeState.hasThemeState(aState); +} + +- (BOOL)setThemeState:(ThemeState)aState +{ +#if DEBUG +// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as +// the preformance cost for this check is to high. We should remove this check in a future release. + if (aState && aState.isa && [aState isKindOfClass:CPArray]) + [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'setThemeStates: instead: " + aState]; +#endif + + if (_themeState.hasThemeState(aState)) + return NO; + + _themeState = _themeState.and(aState); + + return YES; +} + +- (BOOL)unsetThemeState:(ThemeState)aState +{ +#if DEBUG +// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as +// the preformance cost for this check is to high. We should remove this check in a future release. + if (aState && aState.isa && [aState isKindOfClass:CPArray]) + [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'unsetThemeStates: instead: " + aState]; +#endif + + var oldThemeState = _themeState; + + _themeState = _themeState.without(aState); + + if (oldThemeState === _themeState) + return NO; + + return YES; +} + +- (BOOL)setThemeStates:(CPArray)states +{ + var i = [states count], + aState = [states objectAtIndex:--i]; + + while (i > 0) + aState = aState.and([states objectAtIndex:--i]); + + return [self setThemeState:aState]; +} + +- (BOOL)unsetThemeStates:(CPArray)states +{ + var i = [states count], + aState = [states objectAtIndex:--i]; + + while (i > 0) + aState = aState.and([states objectAtIndex:--i]); + + return [self unsetThemeState:aState]; +} + +#pragma mark Theme Attributes + ++ (CPString)defaultThemeClass +{ + return nil; +} + ++ (CPDictionary)themeAttributes +{ + return nil; +} + +- (CPString)themeClass +{ + if (_themeClass) + return _themeClass; + + return [[self class] defaultThemeClass]; +} + +- (void)setThemeClass:(CPString)theClass +{ + _themeClass = theClass; + + [self _loadThemeAttributes]; +} + +var NULL_THEME = {}; + ++ (CPArray)_themeAttributesForTheme:(CPTheme)theme andThemeClass:(CPString)themeClassName +{ + var theClass = [self class], + theClassName = class_getName(theClass), + themeClassNameCache = theme != nil ? theme._cachedThemeAttributes || (theme._cachedThemeAttributes = {}) : NULL_THEME, + themedCacheAttributes = themeClassNameCache[themeClassName] || (themeClassNameCache[themeClassName] = {}), + attributes = themedCacheAttributes[theClassName]; + + if (attributes) + return attributes; + else + attributes = []; + + var CPObjectClass = [CPObject class]; + + for (; theClass && theClass !== CPObjectClass; theClass = [theClass superclass]) + { + var cachedAttributes = themedCacheAttributes[class_getName(theClass)]; + + if (cachedAttributes) + { + attributes = attributes.length ? attributes.concat(cachedAttributes) : attributes; + break; + } + + var attributeDictionary = [theClass themeAttributes]; + + if (!attributeDictionary) + continue; + + var attributeKeys = [attributeDictionary allKeys], + attributeCount = attributeKeys.length; + + while (attributeCount--) + { + var attributeName = attributeKeys[attributeCount], + attributeValue = [attributeDictionary objectForKey:attributeName], + themeAttribute = [[_CPThemeAttribute alloc] initWithName:attributeName defaultValue:attributeValue defaultAttribute:[theme attributeWithName:attributeName forClass:themeClassName]]; + + attributes.push(themeAttribute); + } + } + + themedCacheAttributes[theClassName] = attributes; + + return attributes; +} + +- (void)_loadThemeAttributes +{ + var theClass = [self class], + attributes = [theClass _themeAttributesForTheme:[self theme] andThemeClass:[self themeClass]], + count = attributes.length; + + if (!count) + return; + + _themeAttributes = {}; + + while (count--) + { + var attribute = attributes[count]; + + _themeAttributes[attribute._name] = attribute; + } +} + +- (CPTheme)theme +{ + return _theme; +} + +- (void)setTheme:(CPTheme)aTheme +{ + if (_theme === aTheme) + return; + + _theme = aTheme; + + [self objectDidChangeTheme]; +} + +- (void)objectDidChangeTheme +{ + if (!_themeAttributes) + return; + + var theme = [self theme], + themeClass = [self themeClass]; + + for (var attributeName in _themeAttributes) + { + if (_themeAttributes.hasOwnProperty(attributeName)) + _themeAttributes[attributeName] = [_themeAttributes[attributeName] attributeBySettingParentAttribute:[theme attributeWithName:attributeName forClass:themeClass]]; + } + +} + +- (CPDictionary)_themeAttributeDictionary +{ + var dictionary = @{}; + + if (_themeAttributes) + { + var theme = [self theme]; + + for (var attributeName in _themeAttributes) + { + if (_themeAttributes.hasOwnProperty(attributeName)) + [dictionary setObject:_themeAttributes[attributeName] forKey:attributeName]; + } + } + + return dictionary; +} + +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState +{ +#if DEBUG +// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as +// the preformance cost for this check is to high. We should remove this check in a future release. + if (aState.isa && [aState isKindOfClass:CPArray]) + [CPException raise:CPInvalidArgumentException reason:self + @": aState can't be an array. Please use 'setValue:forThemeAttribute:inStates:' instead: " + aState]; +#endif + + var themeAttr = _themeAttributes && _themeAttributes[aName]; + + if (!themeAttr) + [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; + + _themeAttributes[aName] = [themeAttr attributeBySettingValue:aValue forState:aState]; +} + +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inStates:(CPArray)states +{ + var i = [states count], + aState = [states objectAtIndex:--i]; + + while (i > 0) + aState = aState.and([states objectAtIndex:--i]); + + var themeAttr = _themeAttributes && _themeAttributes[aName]; + + if (!themeAttr) + [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; + + _themeAttributes[aName] = [themeAttr attributeBySettingValue:aValue forState:aState]; +} + +- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName +{ + var themeAttr = _themeAttributes && _themeAttributes[aName]; + + if (!themeAttr) + [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; + + _themeAttributes[aName] = [themeAttr attributeBySettingValue:aValue]; +} + +- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState +{ +#if DEBUG + if (aState.isa && [aState isKindOfClass:CPArray]) + [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'valueForThemeAttribute:inStates:' instead: " + aState]; +#endif + + var themeAttr = _themeAttributes && _themeAttributes[aName]; + + if (!themeAttr) + [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; + + return [themeAttr valueForState:aState]; +} + +- (id)valueForThemeAttribute:(CPString)aName inStates:(CPArray)states +{ + var i = [states count], + aState = [states objectAtIndex:--i]; + + while (i > 0) + aState = aState.and([states objectAtIndex:--i]); + + var themeAttr = _themeAttributes && _themeAttributes[aName]; + + if (!themeAttr) + [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; + + return [themeAttr valueForState:aState]; +} + +- (id)valueForThemeAttribute:(CPString)aName +{ + var themeAttr = _themeAttributes && _themeAttributes[aName]; + + if (!themeAttr) + [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; + + return [themeAttr value]; +} + +- (id)currentValueForThemeAttribute:(CPString)aName +{ + var themeAttr = _themeAttributes && _themeAttributes[aName]; + + if (!themeAttr) + [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"]; + + return [themeAttr valueForState:_themeState]; +} + +- (BOOL)hasThemeAttribute:(CPString)aName +{ + return (_themeAttributes && _themeAttributes[aName] !== undefined); +} + +/*! + Registers theme values encoded in an array at runtime. The format of the data in the array + is the same as that used by ThemeDescriptors.j, with the exception that you need to use + CPColorWithImages() in place of PatternColor(). For more information see the comments + at the top of ThemeDescriptors.j. + + @param themeValues array of theme values +*/ +- (void)registerThemeValues:(CPArray)themeValues +{ + for (var i = 0; i < themeValues.length; ++i) + { + var attributeValueState = themeValues[i], + attribute = attributeValueState[0], + value = attributeValueState[1], + state = attributeValueState[2]; + + if (state) + if (state.isa && [state isKindOfClass:CPArray]) + [self setValue:value forThemeAttribute:attribute inStates:state]; + else + [self setValue:value forThemeAttribute:attribute inState:state]; + else + [self setValue:value forThemeAttribute:attribute]; + } +} + +/*! + Registers theme values encoded in an array at runtime. The format of the data in the array + is the same as that used by ThemeDescriptors.j, with the exception that you need to use + CPColorWithImages() in place of PatternColor(). The values in \c inheritedValues are + registered first, then those in \c themeValues override/augment the inherited values. + For more information see the comments at the top of ThemeDescriptors.j. + + @param themeValues array of base theme values + @param inheritedValues array of overridden/additional theme values +*/ +- (void)registerThemeValues:(CPArray)themeValues inherit:(CPArray)inheritedValues +{ + // Register inherited values first, then override those with the subtheme values. + if (inheritedValues) + [self registerThemeValues:inheritedValues]; + + if (themeValues) + [self registerThemeValues:themeValues]; +} + +- (void)_encodeThemeObjectsWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:[self themeClass] forKey:CPViewThemeClassKey]; + [aCoder encodeObject:String(_themeState) forKey:CPViewThemeStateKey]; + + for (var attributeName in _themeAttributes) + { + if (_themeAttributes.hasOwnProperty(attributeName)) + CPThemeAttributeEncode(aCoder, _themeAttributes[attributeName]); + } +} + +- (void)_decodeThemeObjectsWithCoder:(CPCoder)aCoder +{ + _theme = [CPTheme defaultTheme]; + _themeClass = [aCoder decodeObjectForKey:CPViewThemeClassKey]; + _themeState = CPThemeState([aCoder decodeObjectForKey:CPViewThemeStateKey]); + _themeAttributes = {}; + + var theClass = [self class], + themeClass = [self themeClass], + attributes = [theClass _themeAttributesForTheme:_theme andThemeClass:themeClass], + count = attributes.length; + + while (count--) + { + var attribute = attributes[count]; + + _themeAttributes[attribute._name] = CPThemeAttributeDecode(aCoder, attribute); + } +} + +@end \ No newline at end of file diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 4aa1f4c0e..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) diff --git a/AppKit/_CPToolTip.j b/AppKit/_CPToolTip.j index 6268f8ab4..296293d02 100644 --- a/AppKit/_CPToolTip.j +++ b/AppKit/_CPToolTip.j @@ -176,6 +176,8 @@ var _CPToolTipHeight = 24.0, _toolTipWindow = aWindow; _constrainsToUsableScreen = NO; + [self setPlatformWindow:[_toolTipWindow platformWindow]]; + textFrameSize.height += 4; _content = [CPTextField labelWithTitle:aString]; @@ -193,6 +195,7 @@ var _CPToolTipHeight = 24.0, [self setAlphaValue:0.9]; [_windowView setNeedsDisplay:YES]; + } return self; 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 5ba2124ba..9a18fc879 100755 --- a/Foundation/CPArray/_CPArray.j +++ b/Foundation/CPArray/_CPArray.j @@ -880,6 +880,25 @@ Returns a hash for the object. Unlike Cocoa, the hash value does not take conten return join.call([self _javaScriptArrayCopy], aString); } +/*! + Returns an Array formed by applying a function to each object in the receiver. + @param aFunction a function taking two arguments: (element, index). + @return an Array containing the transformed elements. +*/ +- (CPArray)arrayByApplyingBlock:(Function/*element, index*/)aFunction +{ + var result = [], + count = [self count]; + + for (var idx = 0; idx < count; idx++) + { + var obj = aFunction([self objectAtIndex:idx], idx); + [result addObject:obj]; + } + + return result; +} + // Creating a description of the array /*! diff --git a/Foundation/CPArray/_CPJavaScriptArray.j b/Foundation/CPArray/_CPJavaScriptArray.j index 0246790dd..8822ed0b4 100644 --- a/Foundation/CPArray/_CPJavaScriptArray.j +++ b/Foundation/CPArray/_CPJavaScriptArray.j @@ -91,7 +91,7 @@ var concat = Array.prototype.concat, - (id)initWithObjects:(CPArray)objects count:(CPUInteger)aCount { if ([objects isKindOfClass:_CPJavaScriptArray]) - return slice.call(objects, 0); + return slice.call(objects, 0, aCount); var array = [], index = 0; @@ -233,6 +233,19 @@ var concat = Array.prototype.concat, return join.call(self, aString); } +- (CPArray)arrayByApplyingBlock:(Function/*element, index*/)aFunction +{ + var result = []; + + for (var idx = 0; idx < self.length; idx++) + { + var obj = aFunction(self[idx], idx); + result.push(obj); + } + + return result; +} + - (void)insertObject:(id)anObject atIndex:(CPUInteger)anIndex { if (anIndex > self.length || anIndex < 0) @@ -335,7 +348,6 @@ var concat = Array.prototype.concat, [super addObjectsFromArray:anArray]; } - - (id)copy { return slice.call(self, 0); diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j index 04c131631..3416b64bc 100755 --- a/Foundation/CPAttributedString.j +++ b/Foundation/CPAttributedString.j @@ -763,13 +763,10 @@ - (void)setAttributedString:(CPAttributedString)aString { _string = aString._string; - _rangeEntries = []; - - var i = 0, - count = aString._rangeEntries.length; - - for (; i < count; i++) - _rangeEntries.push(copyRangeEntry(aString._rangeEntries[i])); + _rangeEntries = [aString._rangeEntries arrayByApplyingBlock:function(entry) + { + return copyRangeEntry(entry); + }]; } //Private methods diff --git a/Foundation/CPBundle.j b/Foundation/CPBundle.j index 817ba6717..fa752574a 100644 --- a/Foundation/CPBundle.j +++ b/Foundation/CPBundle.j @@ -25,8 +25,18 @@ @import "CPNotificationCenter.j" @import "CPObject.j" +@global CFBundleCopyBundleLocalizations +@global CFBundleCopyLocalizedString + CPBundleDidLoadNotification = @"CPBundleDidLoadNotification"; +@protocol CPBundleDelegate + +@required +- (void)bundleDidFinishLoading:(CPBundle)aBundle; + +@end + /*! @class CPBundle @ingroup foundation @@ -37,8 +47,8 @@ var CPBundlesForURLStrings = { }; @implementation CPBundle : CPObject { - CFBundle _bundle; - id _delegate; + CFBundle _bundle; + id _delegate; } + (CPBundle)bundleWithURL:(CPURL)aURL @@ -94,6 +104,7 @@ var CPBundlesForURLStrings = { }; if (self) { _bundle = new CFBundle(aURL); + CPBundlesForURLStrings[URLString] = self; } @@ -154,6 +165,21 @@ var CPBundlesForURLStrings = { }; return _bundle.pathForResource(aFilename); } +- (CPString)pathForResource:(CPString)aFilename ofType:(CPString)extension +{ + return _bundle.pathForResource(aFilename, extension); +} + +- (CPString)pathForResource:(CPString)aFilename ofType:(CPString)extension inDirectory:(CPString)subpath +{ + return _bundle.pathForResource(aFilename, extension, subpath); +} + +- (CPString)pathForResource:(CPString)aFilename ofType:(CPString)extension inDirectory:(CPString)subpath forLocalization:(CPString)localizationName +{ + return _bundle.pathForResource(aFilename, extension, subpath, localizationName); +} + - (CPDictionary)infoDictionary { return _bundle.infoDictionary(); @@ -164,7 +190,7 @@ var CPBundlesForURLStrings = { }; return _bundle.valueForInfoDictionaryKey(aKey); } -- (void)loadWithDelegate:(id)aDelegate +- (void)loadWithDelegate:(id )aDelegate { _delegate = aDelegate; @@ -186,15 +212,12 @@ var CPBundlesForURLStrings = { }; - (CPArray)staticResourceURLs { - var staticResourceURLs = [], - staticResources = _bundle.staticResources(), - index = 0, - count = [staticResources count]; + var staticResources = _bundle.staticResources(); - for (; index < count; ++index) - [staticResourceURLs addObject:staticResources[index].URL()]; - - return staticResourceURLs; + return [staticResources arrayByApplyingBlock:function(resource) + { + return resource.URL(); + }]; } - (CPArray)environments @@ -212,4 +235,33 @@ var CPBundlesForURLStrings = { }; return [super description] + "(" + [self bundlePath] + ")"; } + +#pragma mark - +#pragma mark Localization + +- (CPArray)localizations +{ + return CFBundleCopyBundleLocalizations(_bundle); +} + +- (CPString)localizedStringForKey:(CPString)aKey value:(CPString)aValue table:(CPString)aTable +{ + return CFBundleCopyLocalizedString(_bundle, aKey, aValue, aTable); +} + @end + +function CPLocalizedString(key, comment) +{ + return CFCopyLocalizedString(key, comment); +} + +function CPLocalizedStringFromTable(key, table, comment) +{ + return CFCopyLocalizedStringFromTable(key, table, comment); +} + +function CPCopyLocalizedStringFromTableInBundle(key, table, bundle, comment) +{ + return CFCopyLocalizedStringFromTableInBundle(key, table, bundle._bundle, comment); +} \ No newline at end of file diff --git a/Foundation/CPDateFormatter.j b/Foundation/CPDateFormatter.j index 59a48019d..f66179ba2 100644 --- a/Foundation/CPDateFormatter.j +++ b/Foundation/CPDateFormatter.j @@ -1552,7 +1552,7 @@ var defaultDateFormatterBehavior = CPDateFormatterBehavior10_4, month = [[self monthSymbols] indexOfObject:dateComponent] + 1; } - if (month > 11 || length >= 5) + if (month > 12 || length >= 5) return nil; dateArray[1] = month; @@ -1580,7 +1580,7 @@ var defaultDateFormatterBehavior = CPDateFormatterBehavior10_4, month = [[self standaloneMonthSymbols] indexOfObject:dateComponent] + 1; } - if (month > 11 || length >= 5) + if (month > 12 || length >= 5) return nil; dateArray[1] = month; diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index d06c4b9fa..f8c4fa6ac 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -222,13 +222,13 @@ var CPDictionaryMaxDescriptionRecursion = 10; { self = [super init]; - if ([objects count] != [keyArray count]) + var i = [keyArray count]; + + if ([objects count] != i) [CPException raise:CPInvalidArgumentException reason:[CPString stringWithFormat:@"Counts are different.(%d != %d)", [objects count], [keyArray count]]]; if (self) { - var i = [keyArray count]; - while (i--) { var value = objects[i], @@ -273,18 +273,16 @@ var CPDictionaryMaxDescriptionRecursion = 10; if (self) { // The arguments array contains self and _cmd, so the first object is at position 2. - var index = 2; - - for (; index < argCount; index += 2) + while (argCount-- > 2) { - var value = arguments[index], - key = arguments[index + 1]; + var key = arguments[argCount--], + value = arguments[argCount] if (value === nil) - [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[" + ((argCount / 2) - 1) + @"]"]; if (key === nil) - [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[" + ((argCount / 2) - 1) + @"]"]; [self setObject:value forKey:key]; } diff --git a/Foundation/CPException.j b/Foundation/CPException.j index 290d3a877..70064a984 100755 --- a/Foundation/CPException.j +++ b/Foundation/CPException.j @@ -24,6 +24,8 @@ @import "CPObject.j" @import "CPString.j" +@class CPString + CPInvalidArgumentException = @"CPInvalidArgumentException"; CPUnsupportedMethodException = @"CPUnsupportedMethodException"; CPRangeException = @"CPRangeException"; diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j index c9f94fddb..1783caf27 100644 --- a/Foundation/CPIndexSet.j +++ b/Foundation/CPIndexSet.j @@ -1018,14 +1018,13 @@ var CPIndexSetCountKey = @"CPIndexSetCountKey", if (self) { _count = [aCoder decodeIntForKey:CPIndexSetCountKey]; - _ranges = []; - var rangeStrings = [aCoder decodeObjectForKey:CPIndexSetRangeStringsKey], - index = 0, - count = rangeStrings.length; + var rangeStrings = [aCoder decodeObjectForKey:CPIndexSetRangeStringsKey]; - for (; index < count; ++index) - _ranges.push(CPRangeFromString(rangeStrings[index])); + _ranges = [rangeStrings arrayByApplyingBlock:function(range) + { + return CPRangeFromString(range); + }]; } return self; diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index 53f110b32..95c00d36a 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -164,10 +164,11 @@ + (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey { var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substring(1), - selector = "automaticallyNotifiesObserversOf" + capitalizedKey; + selector = "automaticallyNotifiesObserversOf" + capitalizedKey, + aClass = [self class]; - if ([[self class] respondsToSelector:selector]) - return objj_msgSend([self class], selector); + if ([aClass respondsToSelector:selector]) + return aClass.isa.objj_msgSend0(aClass, selector); return YES; } @@ -175,10 +176,11 @@ + (CPSet)keyPathsForValuesAffectingValueForKey:(CPString)aKey { var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substring(1), - selector = "keyPathsForValuesAffecting" + capitalizedKey; + selector = "keyPathsForValuesAffecting" + capitalizedKey, + aClass = [self class]; - if ([[self class] respondsToSelector:selector]) - return objj_msgSend([self class], selector); + if ([aClass respondsToSelector:selector]) + return aClass.isa.objj_msgSend0(aClass, selector); return [CPSet set]; } @@ -421,7 +423,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti setKey_method_imp(self, _cmd, anObject); [self didChangeValueForKey:aKey]; - }, ""); + }, setKey_method.method_types); } // FIXME: Deprecated. @@ -439,7 +441,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti _setKey_method_imp(self, _cmd, anObject); [self didChangeValueForKey:aKey]; - }, ""); + }, _setKey_method.method_types); } // Ordered To-Many Relationships @@ -476,7 +478,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChange:CPKeyValueChangeInsertion valuesAtIndexes:[CPIndexSet indexSetWithIndex:anIndex] forKey:aKey]; - }, ""); + }, insertObject_inKeyAtIndex_method.method_types); } if (insertKey_atIndexes_method) @@ -494,7 +496,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChange:CPKeyValueChangeInsertion valuesAtIndexes:[indexes copy] forKey:aKey]; - }, ""); + }, insertKey_atIndexes_method.method_types); } if (removeObjectFromKeyAtIndex_method) @@ -512,7 +514,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChange:CPKeyValueChangeRemoval valuesAtIndexes:[CPIndexSet indexSetWithIndex:anIndex] forKey:aKey]; - }, ""); + }, removeObjectFromKeyAtIndex_method.method_types); } if (removeKeyAtIndexes_method) @@ -530,7 +532,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChange:CPKeyValueChangeRemoval valuesAtIndexes:[indexes copy] forKey:aKey]; - }, ""); + }, removeKeyAtIndexes_method.method_types); } // These are optional. @@ -556,7 +558,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChange:CPKeyValueChangeReplacement valuesAtIndexes:[CPIndexSet indexSetWithIndex:anIndex] forKey:aKey]; - }, ""); + }, replaceObjectInKeyAtIndex_withObject_method.method_types); } var replaceKeyAtIndexes_withKey_selector = @@ -579,7 +581,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChange:CPKeyValueChangeReplacement valuesAtIndexes:[indexes copy] forKey:aKey]; - }, ""); + }, replaceKeyAtIndexes_withKey_method.method_types); } } @@ -613,7 +615,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChangeValueForKey:aKey withSetMutation:CPKeyValueUnionSetMutation usingObjects:[CPSet setWithObject:anObject]]; - }, ""); + }, addKeyObject_method.method_types); } if (addKey_method) @@ -631,7 +633,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChangeValueForKey:aKey withSetMutation:CPKeyValueUnionSetMutation usingObjects:[objects copy]]; - }, ""); + }, addKey_method.method_types); } if (removeKeyObject_method) @@ -649,7 +651,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChangeValueForKey:aKey withSetMutation:CPKeyValueMinusSetMutation usingObjects:[CPSet setWithObject:anObject]]; - }, ""); + }, removeKeyObject_method.method_types); } if (removeKey_method) @@ -667,7 +669,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChangeValueForKey:aKey withSetMutation:CPKeyValueMinusSetMutation usingObjects:[objects copy]]; - }, ""); + }, removeKey_method.method_types); } // intersect: is optional. @@ -689,7 +691,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti [self didChangeValueForKey:aKey withSetMutation:CPKeyValueIntersectSetMutation usingObjects:[aSet copy]]; - }, ""); + }, intersectKey_method.method_types); } } diff --git a/Foundation/CPKeyedArchiver.j b/Foundation/CPKeyedArchiver.j index e4e0d7bbd..20bb7b4be 100644 --- a/Foundation/CPKeyedArchiver.j +++ b/Foundation/CPKeyedArchiver.j @@ -380,12 +380,10 @@ var _CPKeyedArchiverStringClass = Nil, /* @ignore */ - (void)_encodeArrayOfObjects:(CPArray)objects forKey:(CPString)aKey { - var i = 0, - count = objects.length, - references = []; - - for (; i < count; ++i) - [references addObject:_CPKeyedArchiverEncodeObject(self, objects[i], NO)]; + var references = [objects arrayByApplyingBlock:function(object) + { + return _CPKeyedArchiverEncodeObject(self, object, NO); + }]; [_plistObject setObject:references forKey:aKey]; } diff --git a/Foundation/CPKeyedUnarchiver.j b/Foundation/CPKeyedUnarchiver.j index 8fe7480d7..4f35f66ff 100644 --- a/Foundation/CPKeyedUnarchiver.j +++ b/Foundation/CPKeyedUnarchiver.j @@ -332,7 +332,7 @@ var CPArrayClass = Ni */ - (id)decodeObjectForKey:(CPString)aKey { - var object = _plistObject.valueForKey(aKey), + var object = _plistObject && _plistObject.valueForKey(aKey), objectClass = (object != nil) && object.isa; if (objectClass === CPDictionaryClass || objectClass === CPMutableDictionaryClass) diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index f06c22b0a..5f8ff94da 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -25,6 +25,8 @@ @import "CPException.j" @import "CPNotification.j" @import "CPNull.j" +@import "CPOperationQueue.j" +@import "CPOperation.j" @import "CPSet.j" @class _CPNotificationRegistry @@ -94,13 +96,13 @@ var CPNotificationDefaultCenter = nil; Adds an entry to the receiver’s dispatch table with a block, and optional criteria: notification name and sender. @param aNotificationName the name of the notification the observer wants to watch @param anObject the object in the notification the observer wants to watch - @param queue is ignored for the moment + @param The operation queue to which block should be added. If you pass nil, the block is run synchronously on the posting thread. @param block the block to be executed when the notification is received. */ -- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(id)queue usingBlock:(Function)block +- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(CPOperationQueue)queue usingBlock:(Function)block { var registry = [self _registryForNotificationName:aNotificationName], - observer = [[_CPNotificationObserver alloc] initWithBlock:block]; + observer = [[_CPNotificationObserver alloc] initWithBlock:block queue:queue]; [registry addObserver:observer object:anObject]; @@ -344,9 +346,10 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ /* @ignore */ @implementation _CPNotificationObserver : CPObject { - id _observer; - Function _block; - SEL _selector; + CPOperationQueue _operationQueue; + id _observer; + Function _block; + SEL _selector; } - (id)initWithObserver:(id)anObserver selector:(SEL)aSelector @@ -360,11 +363,12 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ return self; } -- (id)initWithBlock:(Function)aBlock +- (id)initWithBlock:(Function)aBlock queue:(CPOperationQueue)aQueue { if (self) { _block = aBlock; + _operationQueue = aQueue; } return self; @@ -384,7 +388,11 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ { if (_block) { - _block(aNotification); + if (!_operationQueue) + _block(aNotification); + else + [_operationQueue addOperation:[[_CPNotificationObserverOperation alloc] initWithBlock:_block notification:aNotification]]; + return; } @@ -392,3 +400,38 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ } @end + +/* @ignore */ +@implementation _CPNotificationObserverOperation : CPOperation +{ + CPNotification _notification; + Function _block; +} + +/* @ignore */ +- (id)initWithBlock:(Function)aBlock notification:(CPNotification)aNotification +{ + self = [super init]; + + if (self) + { + _block = aBlock; + _notification = aNotification; + } + + return self; +} + +/* @ignore */ +- (void)main +{ + _block(_notification); +} + +/* @ignore */ +- (BOOL)isReady +{ + return YES; +} + +@end diff --git a/Foundation/CPNotificationQueue.j b/Foundation/CPNotificationQueue.j new file mode 100644 index 000000000..5c497cfa9 --- /dev/null +++ b/Foundation/CPNotificationQueue.j @@ -0,0 +1,328 @@ +/* + * CPNotificationQueue.j + * Foundation + * + * Created by Alexandre Wilhelm. + * Copyright 2015 + * + * 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 "CPObject.j" +@import "CPNotification.j" +@import "CPNotificationCenter.j" + +@typedef CPPostingStyle + +/* + @global + @group CPViewAutoresizingMasks + The default resizingMask, the view will not resize or reposition itself. +*/ +CPPostWhenIdle = 1; +/* + @global + @group CPPostingStyle + The notification is posted at the end of the current notification callout or timer. +*/ +CPPostASAP = 2; +/* + @global + @group CPPostingStyle + The notification is posted immediately after coalescing. +*/ +CPPostNow = 3; + + +@typedef CPNotificationCoalescing + +/* + @global + @group CPNotificationCoalescing + Do not coalesce notifications in the queue. +*/ +CPNotificationNoCoalescing = 1 << 0; +/* + @global + @group CPNotificationCoalescing + Coalesce notifications with the same name. +*/ +CPNotificationCoalescingOnName = 1 << 1; +/* + @global + @group CPNotificationCoalescing + Coalesce notifications with the same object. +*/ +CPNotificationCoalescingOnSender = 1 << 2; + + +var CPNotificationDefaultQueue; + +var runLoop = [CPRunLoop mainRunLoop]; + +/*! + @class CPPostingStyle + @ingroup foundation + @brief CPNotificationQueue objects act as buffers for notification centers (instances of CPNotificationCenter). + + Cappuccino provides a framework for sending messages between objects within + a process called notifications. CPNotificationQueue objects (or simply notification queues) + act as buffers for notification centers (instances of CPNotificationCenter). + Whereas a notification center distributes notifications when posted, + notifications placed into the queue can be delayed until the end of the current pass through the run loop + or until the run loop is idle. Duplicate notifications can also be coalesced so that only one notification + is sent although multiple notifications are posted. A notification queue maintains notifications + (instances of C¨Notification) generally in a first in first out (FIFO) order. + When a notification rises to the front of the queue, the queue posts it to the notification center, + which in turn dispatches the notification to all objects registered as observers. +*/ +@implementation CPNotificationQueue : CPObject +{ + BOOL _runLoopLaunched; + CPMutableArray _postNowNotifications; + CPMutableArray _postIdleNotifications; + CPMutableArray _postASAPNotifications; + CPNotificationCenter _notificationCenter; +} + + +#pragma mark - +#pragma mark Class methods + +/*! + Returns the application's notification queue. This notification queue uses the default notification center +*/ ++ (id)defaultQueue +{ + if (!CPNotificationDefaultQueue) + CPNotificationDefaultQueue = [[CPNotificationQueue alloc] initWithNotificationCenter:[CPNotificationCenter defaultCenter]]; + + return CPNotificationDefaultQueue; +} + + +#pragma mark - +#pragma mark Init methods + +/*! + Initializes and returns a notification queue for the specified notification center. + @param anObserver the specified notification center + @return a new CPNotificationQueue +*/ +- (id)initWithNotificationCenter:(CPNotificationCenter)aNotificationCenter +{ + if (self = [super init]) + { + _notificationCenter = aNotificationCenter; + _postNowNotifications = [CPMutableArray new]; + _postIdleNotifications = [CPMutableArray new]; + _postASAPNotifications = [CPMutableArray new]; + } + + return self; +} + + +#pragma mark - +#pragma mark Enqueue methods + +/*! + Adds a notification to the notification queue with a specified posting style. + @param notification the notification to add to the queue + @param postingStyle the posting style for the notification +*/ +- (void)enqueueNotification:(CPNotification)notification postingStyle:(CPPostingStyle)postingStyle +{ + [self enqueueNotification:notification postingStyle:postingStyle coalesceMask:CPNotificationCoalescingOnName|CPNotificationCoalescingOnSender forModes:[CPDefaultRunLoopMode]]; +} + +/*! + Adds a notification to the notification queue with a specified posting style, criteria for coalescing, and runloop mode. + @param notification the notification to add to the queue + @param postingStyle the posting style for the notification + @param coalesceMask a mask indicating what criteria to use when matching attributes of notification to attributes notifications in the queue. + @modes modes the list of modes the notification may be posted in. +*/ +- (void)enqueueNotification:(CPNotification)notification postingStyle:(CPPostingStyle)postingStyle coalesceMask:(CPNotificationCoalescing)coalesceMask forModes:(CPArray)modes +{ + [self _removeNotification:notification coalesceMask:coalesceMask]; + + switch (postingStyle) + { + case CPPostWhenIdle: + [_postIdleNotifications addObject:notification]; + break; + + case CPPostASAP: + [_postASAPNotifications addObject:notification]; + break; + + case CPPostNow: + [_postNowNotifications addObject:notification]; + break; + } + + if ([_postIdleNotifications count] || [_postASAPNotifications count] || [_postNowNotifications count]) + [self _runRunLoop]; + + if (postingStyle == CPPostNow) + { + for (var i = [modes count] - 1; i >= 0; i--) + [[CPRunLoop currentRunLoop] limitDateForMode:modes[i]]; + } +} + + +#pragma mark - +#pragma mark Dequeue methods + +/*! + Removes all notifications from the queue that match a provided notification using provided matching criteria. + @param notification the notification to add to the queue + @param coalesceMask mask indicating what criteria to use when matching attributes of notification to remove notifications in the queue. +*/ +- (void)dequeueNotificationsMatching:(CPNotification)notification coalesceMask:(CPUInteger)coalesceMask +{ + [self _removeNotification:notification coalesceMask:coalesceMask]; +} + + +#pragma mark - +#pragma mark RunLoop methods + +/*! + @ignore +*/ +- (void)_runRunLoop +{ + if (!_runLoopLaunched) + { + [runLoop performSelector:@selector(_launchNotificationsInQueue) target:self argument:nil order:0 modes:[CPDefaultRunLoopMode]]; + _runLoopLaunched = YES; + } +} + +/*! + @ignore +*/ +- (void)_launchNotificationsInQueue +{ + _runLoopLaunched = NO; + + if ([_postNowNotifications count]) + { + [self _launchNotificationsForArray:_postNowNotifications]; + [self _runRunLoop]; + return; + } + + if ([_postASAPNotifications count]) + { + [self _launchNotificationsForArray:_postASAPNotifications]; + [self _runRunLoop]; + return; + } + + if ([_postIdleNotifications count]) + { + [self _launchNotificationsForArray:_postIdleNotifications]; + [self _runRunLoop]; + return; + } +} + + +#pragma mark - +#pragma mark Posting methods + +/*! + @ignore +*/ +- (void)_launchNotificationsForArray:(CPArray)anArray +{ + for (var i = [anArray count] - 1; i >= 0; i--) + { + var notification = anArray[i]; + [_notificationCenter postNotification:notification]; + } + + [anArray removeAllObjects]; +} + + +#pragma mark - +#pragma mark Remove methods + +/*! + @ignore +*/ +- (void)_removeNotification:(CPNotification)notification coalesceMask:(CPUInteger)coalesceMask +{ + [self _removeNotification:notification coalesceMask:coalesceMask inNotifications:_postNowNotifications]; + [self _removeNotification:notification coalesceMask:coalesceMask inNotifications:_postASAPNotifications]; + [self _removeNotification:notification coalesceMask:coalesceMask inNotifications:_postIdleNotifications]; +} + +/*! + @ignore +*/ +- (void)_removeNotification:(CPNotification)aNotification coalesceMask:(CPUInteger)coalesceMask inNotifications:(CPArray)notifications +{ + var notificationsToRemove = [], + name = [aNotification name], + sender = [aNotification object]; + + for (var i = [notifications count] - 1; i >= 0; i--) + { + var notification = notifications[i]; + + if (notification == aNotification) + { + [notificationsToRemove addObject:notification]; + continue; + } + + if (coalesceMask & CPNotificationNoCoalescing) + continue; + + if (coalesceMask & CPNotificationCoalescingOnName && coalesceMask & CPNotificationCoalescingOnSender) + { + if ([notification object] == sender && [notification name] == name) + [notificationsToRemove addObject:notification] + + continue; + } + + if (coalesceMask & CPNotificationCoalescingOnName) + { + if ([notification name] == name) + [notificationsToRemove addObject:notification] + + continue; + } + + if (coalesceMask & CPNotificationCoalescingOnSender) + { + if ([notification object] == sender) + [notificationsToRemove addObject:notification] + + continue; + } + } + + [notifications removeObjectsInArray:notificationsToRemove]; +} + +@end \ No newline at end of file diff --git a/Foundation/CPPredicate/CPExpression.j b/Foundation/CPPredicate/CPExpression.j index 06ed6b0ba..10ca2b598 100644 --- a/Foundation/CPPredicate/CPExpression.j +++ b/Foundation/CPPredicate/CPExpression.j @@ -28,3 +28,5 @@ @import "_CPAggregateExpression.j" @import "_CPSetExpression.j" @import "_CPSubqueryExpression.j" +@import "_CPBlockExpression.j" +@import "_CPConditionalExpression.j" diff --git a/Foundation/CPPredicate/_CPAggregateExpression.j b/Foundation/CPPredicate/_CPAggregateExpression.j index 688166398..e141b1915 100644 --- a/Foundation/CPPredicate/_CPAggregateExpression.j +++ b/Foundation/CPPredicate/_CPAggregateExpression.j @@ -25,7 +25,7 @@ @implementation _CPAggregateExpression : CPExpression { - CPArray _aggregate; + CPArray _aggregate @accessors(getter=collection); } - (id)initWithAggregate:(CPArray)collection @@ -34,6 +34,7 @@ if (self) _aggregate = collection; + return self; } @@ -48,48 +49,30 @@ return YES; } -- (id)collection -{ - return _aggregate; -} - - (id)expressionValueWithObject:(id)object context:(CPDictionary)context { - var eval_array = [CPArray array], - collection = [_aggregate objectEnumerator], - exp; - - while ((exp = [collection nextObject]) !== nil) + return [_aggregate arrayByApplyingBlock:function(exp) { - var eval = [exp expressionValueWithObject:object context:context]; - [eval_array addObject:eval]; - } - - return eval_array; + return [exp expressionValueWithObject:object context:context]; + }]; } - (CPString)description -{ - var i = 0, - count = [_aggregate count], - result = "{"; +{ + var descriptions = [_aggregate arrayByApplyingBlock:function(exp) + { + return [exp description]; + }]; - for (; i < count; i++) - result = result + [CPString stringWithFormat:@"%s%s", [[_aggregate objectAtIndex:i] description], (i + 1 < count) ? @", " : @""]; - - result = result + "}"; - - return result; + return "{" + [descriptions componentsJoinedByString:","] + "}" ; } - (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)variables { - var subst_array = [CPArray array], - count = [_aggregate count], - i = 0; - - for (; i < count; i++) - [subst_array addObject:[[_aggregate objectAtIndex:i] _expressionWithSubstitutionVariables:variables]]; + var subst_array = [_aggregate arrayByApplyingBlock:function(exp) + { + return [exp _expressionWithSubstitutionVariables:variables]; + }]; return [CPExpression expressionForAggregate:subst_array]; } diff --git a/Foundation/CPPredicate/_CPBlockExpression.j b/Foundation/CPPredicate/_CPBlockExpression.j new file mode 100644 index 000000000..846c4f418 --- /dev/null +++ b/Foundation/CPPredicate/_CPBlockExpression.j @@ -0,0 +1,79 @@ +/* + * _CPBlockExpression.j + * + * Created by cacaodev. + * Copyright 2015. + * + * 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 "_CPExpression.j" + +@implementation _CPBlockExpression : CPExpression +{ + Function _block @accessors(getter=expressionBlock); + CPArray _arguments @accessors(getter=arguments); +} + +- (id)initWithBlock:(Function)aBlock arguments:(CPArray)arguments +{ + self = [super initWithExpressionType:CPBlockExpressionType]; + + if (self) + { + _block = aBlock; + _arguments = arguments; + } + + return self; +} + +- (BOOL)isEqual:(id)object +{ + if (self === object) + return YES; + + if (object === nil || object.isa !== self.isa || [object expressionBlock] !== _block || ![[object arguments] isEqual:_arguments]) + return NO; + + return YES; +} + +- (id)expressionValueWithObject:(id)object context:(CPDictionary)context +{ + var args = [_arguments arrayByApplyingBlock:function(exp) + { + return [exp expressionValueWithObject:object context:context]; + }]; + + return _block(object, args, context); +} + +- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)bindings +{ + var args = [_arguments arrayByApplyingBlock:function(exp) + { + return [exp _expressionWithSubstitutionVariables:bindings]; + }]; + + return [[_CPBlockExpression alloc] initWithBlock:_block arguments:args]; +} + +- (CPString)description +{ + return [CPString stringWithFormat:@"Block(function, %@)", [_arguments description]]; +} + +@end \ No newline at end of file diff --git a/Foundation/CPPredicate/_CPConditionalExpression.j b/Foundation/CPPredicate/_CPConditionalExpression.j new file mode 100644 index 000000000..8fc544580 --- /dev/null +++ b/Foundation/CPPredicate/_CPConditionalExpression.j @@ -0,0 +1,78 @@ +/* + * _CPConditionalExpression.j + * + * Created by cacaodev. + * Copyright 2015. + * + * 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 "_CPPredicate.j" +@import "_CPExpression.j" + +@implementation _CPConditionalExpression : CPExpression +{ + CPPredicate _predicate @accessors(getter=predicate); + CPExpression _trueExpression @accessors(getter=trueExpression); + CPExpression _falseExpression @accessors(getter=falseExpression); +} + +- (id)initWithPredicate:(CPPredicate)aPredicate trueExpression:(CPExpression)trueExpression falseExpression:(CPExpression)falseExpression +{ + self = [super initWithExpressionType:CPConditionalExpressionType]; + + if (self) + { + _predicate = aPredicate; + _trueExpression = trueExpression; + _falseExpression = falseExpression; + } + + return self; +} + +- (BOOL)isEqual:(id)object +{ + if (self === object) + return YES; + + if (object === nil || object.isa !== self.isa || ![[object predicate] isEqual:_predicate] || ![[object trueExpression] isEqual:_trueExpression] || ![[object falseExpression] isEqual:_falseExpression]) + return NO; + + return YES; +} + +- (id)expressionValueWithObject:(id)object context:(CPDictionary)context +{ + var eval = [_predicate evaluateWithObject:object substitutionVariables:context], + exp = eval ? _trueExpression : _falseExpression; + + return [exp expressionValueWithObject:object context:context]; +} + +- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)bindings +{ + var predicate = [_predicate predicateWithSubstitutionVariables:bindings], + trueExp = [_trueExpression _expressionWithSubstitutionVariables:bindings], + falseExp = [_falseExpression _expressionWithSubstitutionVariables:bindings]; + + return [[_CPConditionalExpression alloc] initWithPredicate:predicate trueExpression:trueExp falseExpression:falseExp]; +} + +- (CPString)description +{ + return [CPString stringWithFormat:@"TERNARY(%@,%@,%@)", [_predicate predicateFormat], [_trueExpression description], [_falseExpression description]]; +} + +@end \ No newline at end of file diff --git a/Foundation/CPPredicate/_CPConstantValueExpression.j b/Foundation/CPPredicate/_CPConstantValueExpression.j index 617c9b10a..1c1bbbce9 100644 --- a/Foundation/CPPredicate/_CPConstantValueExpression.j +++ b/Foundation/CPPredicate/_CPConstantValueExpression.j @@ -27,7 +27,7 @@ @implementation _CPConstantValueExpression : CPExpression { - id _value; + id _value @accessors(getter=constantValue); } - (id)initWithValue:(id)value @@ -51,11 +51,6 @@ return YES; } -- (id)constantValue -{ - return _value; -} - - (id)expressionValueWithObject:(id)object context:(CPDictionary)context { return _value; @@ -66,6 +61,9 @@ if ([_value isKindOfClass:[CPString class]]) return @"\"" + _value + @"\""; + if (_value === [CPNull null]) + return @"nil"; + return [_value description]; } diff --git a/Foundation/CPPredicate/_CPExpression.j b/Foundation/CPPredicate/_CPExpression.j index 5a9561cb7..8a671c5b2 100644 --- a/Foundation/CPPredicate/_CPExpression.j +++ b/Foundation/CPPredicate/_CPExpression.j @@ -65,6 +65,14 @@ CPIntersectSetExpressionType = 8; An expression that combines two nested expression results by set subtraction. */ CPMinusSetExpressionType = 9; +/*! + An expression that returns the result of evaluating a block. +*/ +CPBlockExpressionType = 10; +/*! + An expression that returns an expression that depends on the evaluation of a predicate. +*/ +CPConditionalExpressionType = 11; /*! @ingroup foundation @@ -259,6 +267,32 @@ CPMinusSetExpressionType = 9; return [[_CPSubqueryExpression alloc] initWithExpression:expression usingIteratorVariable:variable predicate:predicate]; } +/*! + Returns Creates an NSExpression object that will use the Block for evaluating objects. + @param aBlock The Block is applied to the object to be evaluated. + +The Block takes three arguments and returns a value: + +evaluatedObject +The object to be evaluated. +expressions +An array of predicate expressions that evaluates to a collection. +context +A dictionary that the expression can use to store temporary state for one predicate evaluation. + +@discussion Note that context is mutable, and that it can only be accessed during the evaluation of the expression. +@param arguments An array containing NSExpression objects that will be used as parameters during the invocation of the block. +*/ ++ (CPExpression)expressionForBlock:(Function)aBlock arguments:(CPArray)args +{ + return [[_CPBlockExpression alloc] initWithBlock:aBlock arguments:args]; +} + ++ (CPExpression)expressionForConditional:(CPPredicate)aPredicate trueExpression:(CPExpression)trueExpression falseExpression:(CPExpression)falseExpression +{ + return [[_CPConditionalExpression alloc] initWithPredicate:aPredicate trueExpression:trueExpression falseExpression:falseExpression]; +} + // Getting Information About an Expression /*! Returns the expression type for the receiver. @@ -316,7 +350,7 @@ CPMinusSetExpressionType = 9; /*! Returns the arguments for the receiver. - @return The arguments for the receiver—that is, the array of expressions that will be passed as parameters during invocation of the selector on the operand of a function expression. + @return The arguments for the receiver—that is, the array of expressions that will be passed as parameters during invocation of the selector on the operand of a function expression or as a parameter of the block of a block expression. This method raises an exception if it is not applicable to the receiver. */ - (CPArray)arguments @@ -337,8 +371,8 @@ CPMinusSetExpressionType = 9; } /*! - Returns the predicate in a subquery expression. - @return The predicate in a subquery expression.. + Returns the predicate in a subquery expression or a conditional expression. + @return The predicate in a subquery expression or a conditional expression. This method raises an exception if it is not applicable to the receiver. */ - (CPPredicate)predicate @@ -380,6 +414,39 @@ CPMinusSetExpressionType = 9; return nil; } +/*! + Returns the block of a block expression. + @return The block of a block expression. + This method raises an exception if it is not applicable to the receiver. +*/ +- (Function)expressionBlock +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + return nil; +} + +/*! + Returns the true expression of a conditional expression. + @return The true expression of a conditional expression. + This method raises an exception if it is not applicable to the receiver. +*/ +- (CPExpression)trueExpression +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + return nil; +} + +/*! + Returns the false expression of a conditional expression. + @return The false expression of a conditional expression. + This method raises an exception if it is not applicable to the receiver. +*/ +- (CPExpression)falseExpression +{ + _CPRaiseInvalidAbstractInvocation(self, _cmd); + return nil; +} + - (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)variables { return self; diff --git a/Foundation/CPPredicate/_CPFunctionExpression.j b/Foundation/CPPredicate/_CPFunctionExpression.j index 394c93612..7de9f0d73 100644 --- a/Foundation/CPPredicate/_CPFunctionExpression.j +++ b/Foundation/CPPredicate/_CPFunctionExpression.j @@ -28,9 +28,9 @@ @implementation _CPFunctionExpression : CPExpression { - CPExpression _operand; + CPExpression _operand @accessors(getter=operand); SEL _selector; - CPArray _arguments; + CPArray _arguments @accessors(getter=arguments); int _argc; int _maxargs; } @@ -88,16 +88,6 @@ return [self _function]; } -- (CPArray)arguments -{ - return _arguments; -} - -- (CPExpression)operand -{ - return _operand; -} - - (id)expressionValueWithObject:(id)object context:(CPDictionary)context { var target = [_operand expressionValueWithObject:object context:context], @@ -143,11 +133,10 @@ - (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)variables { var operand = [[self operand] _expressionWithSubstitutionVariables:variables], - args = [CPArray array], - i = 0; - - for (; i < _argc; i++) - [args addObject:[_arguments[i] _expressionWithSubstitutionVariables:variables]]; + args = [_arguments arrayByApplyingBlock:function(arg) + { + return [arg _expressionWithSubstitutionVariables:variables]; + }]; return [CPExpression expressionForFunction:operand selectorName:[self _function] arguments:args]; } diff --git a/Foundation/CPPredicate/_CPPredicate.j b/Foundation/CPPredicate/_CPPredicate.j index 201bcccd0..34001c415 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"]) { @@ -744,16 +744,43 @@ if (![self scanString:@"," intoString:NULL]) CPRaiseParseError(self, @"expression"); + variableExpression = [self parseExpression]; if (![self scanString:@"," intoString:NULL]) CPRaiseParseError(self, @"expression"); + subpredicate = [self parsePredicate]; + if (![self scanString:@")" intoString:NULL]) + CPRaiseParseError(self, @"predicate"); + + return [[_CPSubqueryExpression alloc] initWithExpression:collection usingIteratorExpression:variableExpression predicate:subpredicate]; + } + + if ([self scanString:@"TERNARY" intoString:NULL]) + { + if (![self scanString:@"(" intoString:NULL]) + CPRaiseParseError(self, @"expression"); + + var predicate = [self parsePredicate], + trueExpression, + falseExpression; + + if (![self scanString:@"," intoString:NULL]) + CPRaiseParseError(self, @"predicate"); + + trueExpression = [self parseExpression]; + + if (![self scanString:@"," intoString:NULL]) + CPRaiseParseError(self, @"expression"); + + falseExpression = [self parseExpression]; + if (![self scanString:@")" intoString:NULL]) CPRaiseParseError(self, @"expression"); - return [[_CPSubqueryExpression alloc] initWithExpression:collection usingIteratorExpression:variableExpression predicate:subpredicate]; + return [CPExpression expressionForConditional:predicate trueExpression:trueExpression falseExpression:falseExpression]; } if ([self scanString:@"FUNCTION" intoString:NULL]) diff --git a/Foundation/CPPredicate/_CPSetExpression.j b/Foundation/CPPredicate/_CPSetExpression.j index a0e9df3bb..707486b32 100644 --- a/Foundation/CPPredicate/_CPSetExpression.j +++ b/Foundation/CPPredicate/_CPSetExpression.j @@ -25,8 +25,8 @@ @implementation _CPSetExpression : CPExpression { - CPExpression _left; - CPExpression _right; + CPExpression _left @accessors(getter=leftExpression); + CPExpression _right @accessors(getter=rightExpression); } - (id)initWithType:(int)type left:(CPExpression)left right:(CPExpression)right @@ -88,16 +88,6 @@ return self; } -- (CPExpression)leftExpression -{ - return _left; -} - -- (CPExpression)rightExpression -{ - return _right; -} - - (CPString)description { var desc; diff --git a/Foundation/CPPredicate/_CPSubqueryExpression.j b/Foundation/CPPredicate/_CPSubqueryExpression.j index a94d88d2c..d69483d2c 100644 --- a/Foundation/CPPredicate/_CPSubqueryExpression.j +++ b/Foundation/CPPredicate/_CPSubqueryExpression.j @@ -26,9 +26,9 @@ @implementation _CPSubqueryExpression : CPExpression { - CPExpression _collection; + CPExpression _collection @accessors(getter=collection); CPExpression _variableExpression; - CPPredicate _subpredicate; + CPPredicate _subpredicate @accessors(getter=predicate); } - (id)initWithExpression:(CPExpression)collection usingIteratorVariable:(CPString)variable predicate:(CPPredicate)subpredicate @@ -47,23 +47,25 @@ _collection = collection; _variableExpression = variableExpression; } + return self; } -- (id)expressionValueWithObject:(id)object context:(id)context +- (id)expressionValueWithObject:(id)object context:(id)aContext { - var collection = [_collection expressionValueWithObject:object context:context], - count = [collection count], + var collection = [_collection expressionValueWithObject:object context:aContext], result = [CPArray array], - bindings = @{ [self variable]: [CPExpression expressionForEvaluatedObject] }, - i = 0; + variable = [self variable], + context = aContext || @{}; - for (; i < count; i++) + if ([context objectForKey:variable] == nil) + [context setObject:[CPExpression expressionForEvaluatedObject] forKey:variable]; + + [collection enumerateObjectsUsingBlock:function(exp, idx, stop) { - var item = [collection objectAtIndex:i]; - if ([_subpredicate evaluateWithObject:item substitutionVariables:bindings]) - [result addObject:item]; - } + if ([_subpredicate evaluateWithObject:exp substitutionVariables:context]) + [result addObject:exp]; + }]; return result; } @@ -79,21 +81,11 @@ return YES; } -- (CPExpression)collection -{ - return _collection; -} - - (id)copy { return [[_CPSubqueryExpression alloc] initWithExpression:[_collection copy] usingIteratorExpression:[_variableExpression copy] predicate:[_subpredicate copy]]; } -- (CPPredicate)predicate -{ - return _subpredicate; -} - - (CPString)description { return [self predicateFormat]; diff --git a/Foundation/CPPredicate/_CPVariableExpression.j b/Foundation/CPPredicate/_CPVariableExpression.j index 910ef23d5..a33911222 100644 --- a/Foundation/CPPredicate/_CPVariableExpression.j +++ b/Foundation/CPPredicate/_CPVariableExpression.j @@ -29,7 +29,7 @@ @implementation _CPVariableExpression : CPExpression { - CPString _variable; + CPString _variable @accessors(getter=variable); } - (id)initWithVariable:(CPString)variable @@ -54,11 +54,6 @@ return YES; } -- (CPString)variable -{ - return _variable; -} - - (id)expressionValueWithObject:object context:(CPDictionary)context { var expression = [self _expressionWithSubstitutionVariables:context]; diff --git a/Foundation/CPRunLoop.j b/Foundation/CPRunLoop.j index 47077a1c7..a745040d7 100644 --- a/Foundation/CPRunLoop.j +++ b/Foundation/CPRunLoop.j @@ -42,6 +42,7 @@ var _CPRunLoopPerformPool = [], /* @ignore */ @implementation _CPRunLoopPerform : CPObject { + Function _block; id _target; SEL _selector; id _argument; @@ -64,6 +65,7 @@ var _CPRunLoopPerformPool = [], { var perform = _CPRunLoopPerformPool.pop(); + perform._block = nil; perform._target = aTarget; perform._selector = aSelector; perform._argument = anArgument; @@ -77,6 +79,26 @@ var _CPRunLoopPerformPool = [], return [[self alloc] initWithSelector:aSelector target:aTarget argument:anArgument order:anOrder modes:modes]; } ++ (_CPRunLoopPerform)performWithBlock:(Function)aBlock argument:(id)anArgument order:(unsigned)anOrder modes:(CPArray)modes +{ + if (_CPRunLoopPerformPool.length) + { + var perform = _CPRunLoopPerformPool.pop(); + + perform._target = nil; + perform._selector = nil; + perform._block = aBlock; + perform._argument = anArgument; + perform._order = anOrder; + perform._runLoopModes = modes; + perform._isValid = YES; + + return perform; + } + + return [[self alloc] initWithBlock:aBlock argument:anArgument order:anOrder modes:modes]; +} + - (id)initWithSelector:(SEL)aSelector target:(SEL)aTarget argument:(id)anArgument order:(unsigned)anOrder modes:(CPArray)modes { self = [super init]; @@ -94,6 +116,22 @@ var _CPRunLoopPerformPool = [], return self; } +- (id)initWithBlock:(Function)aBlock argument:(id)anArgument order:(unsigned)anOrder modes:(CPArray)modes +{ + self = [super init]; + + if (self) + { + _block = aBlock; + _argument = anArgument; + _order = anOrder; + _runLoopModes = modes; + _isValid = YES; + } + + return self; +} + - (SEL)selector { return _selector; @@ -121,7 +159,10 @@ var _CPRunLoopPerformPool = [], if ([_runLoopModes containsObject:aRunLoopMode]) { - [_target performSelector:_selector withObject:_argument]; + if (_block) + _block(_argument); + else + [_target performSelector:_selector withObject:_argument]; return YES; } @@ -227,6 +268,23 @@ var CPRunLoopLastNativeRunLoop = 0; _orderedPerforms.splice(count + 1, 0, perform); } + +/*! + @ignore +*/ +- (void)performBlock:(Function)aBlock argument:(id)anArgument order:(int)anOrder modes:(CPArray)modes +{ + var perform = [_CPRunLoopPerform performWithBlock:aBlock argument:anArgument order:anOrder modes:modes], + count = _orderedPerforms.length; + + // We sort ourselves in reverse because we iterate this list backwards. + while (count--) + if (anOrder < [_orderedPerforms[count] order]) + break; + + _orderedPerforms.splice(count + 1, 0, perform); +} + /*! Cancels the specified selector and target. @param aSelector the selector of the method to invoke diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 5a4f09f26..52df11606 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -25,6 +25,18 @@ @import "CPRunLoop.j" @import "CPURLRequest.j" @import "CPURLResponse.j" +@import "CPOperationQueue.j" +@import "CPOperation.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 @@ -76,16 +88,19 @@ 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; + + CPOperationQueue _operationQueue; + CPOperation _connectionOperation @accessors(readonly, getter=operation); } -+ (void)setClassDelegate:(id)delegate ++ (void)setClassDelegate:(id )delegate { CPURLConnectionDelegate = delegate; } @@ -127,6 +142,18 @@ var CPURLConnectionDelegate = nil; return nil; } +/* + Loads the data for a URL request and executes a function on an operation queue when the request completes or fails. + @param aRequest contains the URL to obtain data from. + @param aQueue The operation queue to which the function is dispatched when the request completes or failed. + @param aHandler The function to execute. + @discussion If the request completes successfully, the data parameter of the function contains the resource data, and the error parameter is nil. If the request fails, the data parameter is nil and the error parameter contain information about the failure. +*/ ++ (CPURLConnection)sendAsynchronousRequest:(CPURLRequest)aRequest queue:(CPOperationQueue)aQueue completionHandler:(Function)aHandler +{ + return [[self alloc] _initWithRequest:aRequest queue:aQueue completionHandler:aHandler]; +} + /* Creates a url connection with a delegate to monitor the request progress. @param aRequest contains the URL to obtain data from @@ -145,37 +172,63 @@ 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]; if (self) { - _request = aRequest; - _originalRequest = [aRequest copy]; _delegate = aDelegate; - _isCanceled = NO; + _operationQueue = nil; + _connectionOperation = nil; - var URL = [_request URL], - scheme = [URL scheme]; + [self _initWithRequest:aRequest]; + } - // Browsers use "file:", Titanium uses "app:" - _isLocalFileConnection = scheme === "file" || - ((scheme === "http" || scheme === "https") && - window.location && - (window.location.protocol === "file:" || window.location.protocol === "app:")); + if (shouldStartImmediately) + [self start]; - _HTTPRequest = new CFHTTPRequest(); - _HTTPRequest.setWithCredentials([aRequest withCredentials]); + return self; +} - if (shouldStartImmediately) - [self start]; +- (void)_initWithRequest:(CPURLRequest)aRequest +{ + _request = aRequest; + _originalRequest = [aRequest copy]; + _isCanceled = NO; + + var URL = [_request URL], + scheme = [URL scheme]; + + // Browsers use "file:", Titanium uses "app:" + _isLocalFileConnection = scheme === "file" || + ((scheme === "http" || scheme === "https") && + window.location && + (window.location.protocol === "file:" || window.location.protocol === "app:")); + + _HTTPRequest = new CFHTTPRequest(); + _HTTPRequest.setTimeout([aRequest timeoutInterval] * 1000); + _HTTPRequest.setWithCredentials([aRequest withCredentials]); +} + +- (id)_initWithRequest:(CPURLRequest)aRequest queue:(CPOperationQueue)aQueue completionHandler:(Function)aHandler +{ + self = [super init]; + + if (self) + { + _delegate = nil; + _operationQueue = aQueue; + _connectionOperation = [[_AsynchronousConnectionOperation alloc] initWithFunction:aHandler]; + + [self _initWithRequest:aRequest]; + [self start]; } 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 +253,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 +266,18 @@ 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]; + else if (_connectionOperation !== nil) + [self _connectionOperationDidReceiveResponse:nil data:nil error:anException]; +} + /* Cancels the current request. */ @@ -227,6 +288,9 @@ var CPURLConnectionDelegate = nil; try { _HTTPRequest.abort(); + + if (_connectionOperation) + [_connectionOperation cancel]; } // We expect an exception in some browsers like FireFox. catch (anException) @@ -239,10 +303,21 @@ 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]; @@ -251,23 +326,27 @@ var CPURLConnectionDelegate = nil; [CPURLConnectionDelegate connectionDidReceiveAuthenticationChallenge:self]; else { - if ([_delegate respondsToSelector:@selector(connection:didReceiveResponse:)]) + var response; + + if (_isLocalFileConnection) + response = [[CPURLResponse alloc] initWithURL:URL]; + else { - if (_isLocalFileConnection) - [_delegate connection:self didReceiveResponse:[[CPURLResponse alloc] initWithURL:URL]]; - else - { - var response = [[CPHTTPURLResponse alloc] initWithURL:URL]; - [response _setStatusCode:statusCode]; - [response _setAllResponseHeaders:_HTTPRequest.getAllResponseHeaders()]; - [_delegate connection:self didReceiveResponse:response]; - } + response = [[CPHTTPURLResponse alloc] initWithURL:URL]; + [response _setStatusCode:statusCode]; + [response _setAllResponseHeaders:_HTTPRequest.getAllResponseHeaders()]; } + if ([_delegate respondsToSelector:@selector(connection:didReceiveResponse:)]) + [_delegate connection:self didReceiveResponse:response]; + if (!_isCanceled) { if ([_delegate respondsToSelector:@selector(connection:didReceiveData:)]) [_delegate connection:self didReceiveData:_HTTPRequest.responseText()]; + else if (_connectionOperation !== nil) + [self _connectionOperationDidReceiveResponse:response data:_HTTPRequest.responseText() error:nil]; + if ([_delegate respondsToSelector:@selector(connectionDidFinishLoading:)]) [_delegate connectionDidFinishLoading:self]; } @@ -283,6 +362,69 @@ var CPURLConnectionDelegate = nil; return _HTTPRequest; } +- (void)_connectionOperationDidReceiveResponse:(CPURLResponse)aResponse data:(CPData)aData error:(CPError)anError +{ + [_connectionOperation _setResponse:aResponse data:aData error:anError]; + + if (_operationQueue) + [_operationQueue addOperation:_connectionOperation]; + else + { + // Do we need to send CPOperation KVO notifications ? + [_connectionOperation main]; + } +} + +@end + +/* @ignore */ +@implementation _AsynchronousConnectionOperation : CPOperation +{ + BOOL _didReceiveResponse; + + CPURLResponse _response; + CPData _data; + CPError _error; + Function _operationFunction; +} + +/* @ignore */ +- (id)initWithFunction:(Function)aFunction +{ + self = [super init]; + + if (self) + { + _didReceiveResponse = NO; + _response = nil; + _data = nil; + _error = nil; + _operationFunction = aFunction; + } + + return self; +} + +- (void)_setResponse:(CPURLResponse)aResponse data:(CPData)aData error:(CPError)anError +{ + _didReceiveResponse = YES; + _response = aResponse; + _data = aData; + _error = anError; +} + +/* @ignore */ +- (void)main +{ + _operationFunction(_response, _data, _error); +} + +/* @ignore */ +- (BOOL)isReady +{ + return (_didReceiveResponse && [super isReady]); +} + @end @implementation CPURLConnection (Deprecated) 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..e2d752b17 100755 --- a/Foundation/Foundation.j +++ b/Foundation/Foundation.j @@ -54,6 +54,7 @@ @import "CPMutableSet.j" @import "CPNotification.j" @import "CPNotificationCenter.j" +@import "CPNotificationQueue.j" @import "CPNull.j" @import "CPNumber.j" @import "CPNumberFormatter.j" @@ -78,6 +79,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/Foundation/Jakefile b/Foundation/Jakefile index 20d218c9e..066d1341b 100644 --- a/Foundation/Jakefile +++ b/Foundation/Jakefile @@ -51,7 +51,7 @@ foundationTask = framework ("Foundation", function(foundationTask) INCLUDES = "--include \"../AppKit/Platform/Platform.h\" " + INCLUDES; if ($CONFIGURATION === "Release") - foundationTask.setCompilerFlags("-O " + INCLUDES); + foundationTask.setCompilerFlags("-O2 " + INCLUDES); else foundationTask.setCompilerFlags("-DDEBUG -g " + INCLUDES); }); 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/Bootstrap.js b/Objective-J/Bootstrap.js index 58778f7d0..ddd7263bf 100644 --- a/Objective-J/Bootstrap.js +++ b/Objective-J/Bootstrap.js @@ -45,6 +45,23 @@ if (DOMBaseElementsCount > 0) pageURL = new CFURL(DOMBaseElementHref, pageURL); } +// Set compiler flags + +if (typeof OBJJ_COMPILER_FLAGS !== 'undefined') +{ + var flags = 0; + for (var i = 0; i < OBJJ_COMPILER_FLAGS.length; i++) + { + var flag = ObjJAcornCompiler.Flags[OBJJ_COMPILER_FLAGS[i]]; + + if (flag != null) + { + flags |= flag; + } + } + exports.setCurrentCompilerFlags(flags); +} + // Turn the main file into a URL. var mainFileURL = new CFURL(window.OBJJ_MAIN_FILE || "main.j"), diff --git a/Objective-J/CFBundle.js b/Objective-J/CFBundle.js index db3f77190..995b60904 100644 --- a/Objective-J/CFBundle.js +++ b/Objective-J/CFBundle.js @@ -20,20 +20,24 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -var CFBundleUnloaded = 0, - CFBundleLoading = 1 << 0, - CFBundleLoadingInfoPlist = 1 << 1, - CFBundleLoadingExecutable = 1 << 2, - CFBundleLoadingSpritedImages = 1 << 3, - CFBundleLoaded = 1 << 4; +var CFBundleUnloaded = 0, + CFBundleLoading = 1 << 0, + CFBundleLoadingInfoPlist = 1 << 1, + CFBundleLoadingExecutable = 1 << 2, + CFBundleLoadingSpritedImages = 1 << 3, + CFBundleLoadingLocalizableStrings = 1 << 4, + CFBundleLoaded = 1 << 5; var CFBundlesForURLStrings = { }, CFBundlesForClasses = { }, CFBundlesWithIdentifiers = { }, - CFCacheBuster = new Date().getTime(), - CFTotalBytesLoaded = 0, + CFCacheBuster = new Date().getTime(), + CFTotalBytesLoaded = 0, CPApplicationSizeInBytes = 0; +var CPBundleDefaultBrowserLanguage = "CPBundleDefaultBrowserLanguage", + CPBundleDefaultLanguage = "CPBundleDefaultLanguage"; + GLOBAL(CFBundle) = function(/*CFURL|String*/ aURL) { aURL = makeAbsoluteURL(aURL).asDirectoryPathURL(); @@ -58,6 +62,9 @@ GLOBAL(CFBundle) = function(/*CFURL|String*/ aURL) this._infoDictionary = new CFDictionary(); this._eventDispatcher = new EventDispatcher(this); + + this._localizableStrings = []; + this._loadedLanguage = NULL; } DISPLAY_NAME(CFBundle); @@ -145,11 +152,14 @@ CFBundle.prototype.resourcesDirectoryURL = function() DISPLAY_NAME(CFBundle.prototype.resourcesDirectoryURL); -CFBundle.prototype.resourceURL = function(/*String*/ aResourceName, /*String*/ aType, /*String*/ aSubDirectory) +CFBundle.prototype.resourceURL = function(/*String*/ aResourceName, /*String*/ aType, /*String*/ aSubDirectory, /*String*/ localizationName) { if (aType) aResourceName = aResourceName + "." + aType; + if (localizationName) + aResourceName = localizationName + aResourceName; + if (aSubDirectory) aResourceName = aSubDirectory + "/" + aResourceName; @@ -194,6 +204,11 @@ CFBundle.prototype.infoDictionary = function() DISPLAY_NAME(CFBundle.prototype.infoDictionary); +CFBundle.prototype.loadedLanguage = function() +{ + return this._loadedLanguage; +}; + CFBundle.prototype.valueForInfoDictionaryKey = function(/*String*/ aKey) { return this._infoDictionary.valueForKey(aKey); @@ -318,6 +333,7 @@ CFBundle.prototype.load = function(/*BOOL*/ shouldExecute) if (self === CFBundle.mainBundle() && self.valueForInfoDictionaryKey("CPApplicationSize")) CPApplicationSizeInBytes = self.valueForInfoDictionaryKey("CPApplicationSize").valueForKey("executable") || 0; + loadLanguageForBundle(self); loadExecutableAndResources(self, shouldExecute); } @@ -354,6 +370,7 @@ function loadExecutableAndResources(/*Bundle*/ aBundle, /*BOOL*/ shouldExecute) loadExecutableForBundle(aBundle, success, failure, progress); loadSpritedImagesForBundle(aBundle, success, failure, progress); + loadLocalizableStringsForBundle(aBundle, success, failure, progress); if (aBundle._loadStatus === CFBundleLoading) return success(); @@ -490,6 +507,120 @@ function loadSpritedImagesForBundle(/*Bundle*/ aBundle, success, failure, progre }, failure, progress); } +function loadLocalizableStringsForBundle(/*Bundle*/ aBundle, success, failure, progress) +{ + var language = aBundle._loadedLanguage; + + if (!language) + return; + + var localizableStrings = aBundle.valueForInfoDictionaryKey("CPBundleLocalizableStrings"); + + if (!localizableStrings) + return; + + var self = aBundle, + length = localizableStrings.length, + languagePathURL = new CFURL(language + ".lproj/", self.resourcesDirectoryURL()), + fileSuccessed = 0; + + for (var i = 0; i < length; i++) + { + var localizableString = localizableStrings[i]; + + function onsuccess(/*Event*/ anEvent) + { + var contentFile = anEvent.request.responseText(), + tableName = new CFURL(anEvent.request._URL).lastPathComponent(); + + try + { + loadLocalizableContentForFileInBundle(self, contentFile, tableName); + + if (++fileSuccessed == length) + { + aBundle._loadStatus &= ~CFBundleLoadingLocalizableStrings; + success(); + } + } + catch(e) + { + failure(new Error("Error when parsing the localizable file " + tableName)); + } + } + + aBundle._loadStatus |= CFBundleLoadingLocalizableStrings; + new FileRequest(new CFURL(localizableString, languagePathURL), onsuccess, failure, progress); + } +} + +function loadLocalizableContentForFileInBundle(bundle, contentFile, tableName) +{ + var values = {}, + lines = contentFile.split("\n"), + currentContext; + + bundle._localizableStrings[tableName] = values; + + for (var i = 0; i < lines.length; i++) + { + var line = lines[i]; + + // Context + if (line[0] == "/") + { + currentContext = line.substring(2, line.length - 2).trim(); + continue; + } + + // Key + if (line[0] == "\"") + { + var split = line.split("\"") + + // Here we add twice the translated value, once with the context and once without + // This will help in term of rapidity when asking the value of the key + + var key = split[1]; + + if (!(key in values)) + values[key] = split[3]; + + key += currentContext; + + if (!(key in values)) + values[key] = split[3]; + + continue; + } + } +} + +function loadLanguageForBundle(aBundle) +{ + if (aBundle._loadedLanguage) + return; + + var defaultLanguage = aBundle.valueForInfoDictionaryKey(CPBundleDefaultLanguage); + + if (defaultLanguage != CPBundleDefaultBrowserLanguage && defaultLanguage) + { + aBundle._loadedLanguage = defaultLanguage; + return; + } + + if (typeof navigator == "undefined") + return; + + // userLanguage is an IE only property. + var language = (typeof navigator.language !== "undefined") ? navigator.language : navigator.userLanguage; + + if (!language) + return; + + aBundle._loadedLanguage = language.substring(0, 2); +} + var CFBundleSpriteSupportListeners = [], CFBundleSupportedSpriteType = -1, CFBundleNoSpriteType = 0, @@ -734,7 +865,53 @@ CFBundle.prototype.path = function() return this.bundlePath.apply(this, arguments); }; -CFBundle.prototype.pathForResource = function(aResource) +CFBundle.prototype.pathForResource = function(aResource, aType, aSubDirectory, localizationName) { - return this.resourceURL(aResource).absoluteString(); + return this.resourceURL(aResource, aType, aSubDirectory, localizationName).absoluteString(); }; + +GLOBAL(CFBundleCopyLocalizedString) = function (/*Bundle*/ bundle, key, value, tableName) +{ + return CFCopyLocalizedStringWithDefaultValue(key, tableName, bundle, value, ""); +} + +GLOBAL(CFBundleCopyBundleLocalizations) = function (/*Bundle*/ aBundle) +{ + return [this._loadedLanguage]; +} + +GLOBAL(CFCopyLocalizedString) = function (key, comment) +{ + return CFCopyLocalizedStringFromTable(key, "Localizable", comment); +} + +GLOBAL(CFCopyLocalizedStringFromTable) = function (key, tableName, comment) +{ + return CFCopyLocalizedStringFromTableInBundle(key, tableName, CFBundleGetMainBundle(), comment); +} + +GLOBAL(CFCopyLocalizedStringFromTableInBundle) = function (key, tableName, bundle, comment) +{ + return CFCopyLocalizedStringWithDefaultValue(key, tableName, bundle, null, comment); +} + +GLOBAL(CFCopyLocalizedStringWithDefaultValue) = function (key, tableName, bundle, value, comment) +{ + var string; + + if (!tableName) + tableName = "Localizable"; + + tableName += ".strings"; + + var localizableString = bundle._localizableStrings[tableName]; + + string = localizableString ? localizableString[key + comment] : null; + + return string || (value || key); +} + +GLOBAL(CFBundleGetMainBundle) = function () +{ + return CFBundle.mainBundle(); +} diff --git a/Objective-J/CFHTTPRequest.js b/Objective-J/CFHTTPRequest.js old mode 100644 new mode 100755 index 37bdf61e8..2c112e749 --- a/Objective-J/CFHTTPRequest.js +++ b/Objective-J/CFHTTPRequest.js @@ -104,7 +104,8 @@ GLOBAL(CFHTTPRequest) = function() this._nativeRequest = new NativeRequest(); // by default, all requests will assume that credentials should not be sent. - this._nativeRequest.withCredentials = false; + this._withCredentials = false; + this._timeout = 60000; var self = this; this._stateChangeHandler = function() @@ -112,7 +113,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 +216,19 @@ CFHTTPRequest.prototype.getResponseHeader = function(/*String*/ aHeader) return this._nativeRequest.getResponseHeader(aHeader); }; +CFHTTPRequest.prototype.setTimeout = function(/*int*/ aTimeout) +{ + this._timeout = aTimeout; + + if (this._isOpen) + this._nativeRequest.timeout = aTimeout; +}; + +CFHTTPRequest.prototype.getTimeout = function(/*int*/ aTimeout) +{ + return this._timeout; +}; + CFHTTPRequest.prototype.getAllResponseHeaders = function() { return this._nativeRequest.getAllResponseHeaders(); @@ -221,13 +241,24 @@ CFHTTPRequest.prototype.overrideMimeType = function(/*String*/ aMimeType) CFHTTPRequest.prototype.open = function(/*String*/ aMethod, /*String*/ aURL, /*Boolean*/ isAsynchronous, /*String*/ aUser, /*String*/ aPassword) { + var retval; + this._isOpen = true; this._URL = aURL; this._async = isAsynchronous; this._method = aMethod; this._user = aUser; this._password = aPassword; - return this._nativeRequest.open(aMethod, aURL, isAsynchronous, aUser, aPassword); + + requestReturnValue = this._nativeRequest.open(aMethod, aURL, isAsynchronous, aUser, aPassword); + + if (this._async) + { + this._nativeRequest.withCredentials = this._withCredentials; + this._nativeRequest.timeout = this._timeout; + } + + return requestReturnValue; }; CFHTTPRequest.prototype.send = function(/*Object*/ aBody) @@ -235,7 +266,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; } @@ -264,6 +298,7 @@ CFHTTPRequest.prototype.send = function(/*Object*/ aBody) CFHTTPRequest.prototype.abort = function() { this._isOpen = false; + return this._nativeRequest.abort(); }; @@ -277,25 +312,37 @@ 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; + this._withCredentials = willSendWithCredentials; + + if (this._isOpen && this._async) + this._nativeRequest.withCredentials = willSendWithCredentials; }; -CFHTTPRequest.prototype.withCredentials = function() +CFHTTPRequest.prototype.withCredentials = function() { - return this._nativeRequest.withCredentials; + return this._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, + 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(); @@ -307,7 +354,9 @@ function determineAndDispatchHTTPRequestEvents(/*CFHTTPRequest*/ aRequest) eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest}); } else + { eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest}); + } } function FileRequest(/*CFURL*/ aURL, onsuccess, onfailure, onprogress) @@ -322,13 +371,22 @@ 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" }), + gccFlags = require("objective-j").currentGccCompilerFlags(), 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) { @@ -339,6 +397,7 @@ function FileRequest(/*CFURL*/ aURL, onsuccess, onfailure, onprogress) { onfailure({request: request}); } + return; } #endif diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 9dbf5ebd9..1d74d0f10 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -90,10 +90,14 @@ exports.run = function(args) if (argv[0] === "--help" || argv[0] === "-h") { print("Usage (objj): " + args[0] + " [options] [--] files..."); - print(" -v, --version print the current version of objj"); - 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(" -v, --version print the current version of objj"); + 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.") + print(" -g, --include-debug-symbols Include debug symbols when compiling.") + print(" -T, --dont-include-type-signatures Do not include type signatures when compiling.") + print(" -O2, --inline-msg-send Inline objj_msgSend function when compiling.") return; } @@ -101,45 +105,75 @@ 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; + + case "-g": + case "--include-debug-symbols": + argv.shift(); + (OBJJ_COMPILER_FLAGS || (OBJJ_COMPILER_FLAGS = [])).push("IncludeDebugSymbols"); + break; + + case "-T": + case "--dont-include-type-signatures": + argv.shift(); + (OBJJ_COMPILER_FLAGS || (OBJJ_COMPILER_FLAGS = [])).push("IncludeTypeSignatures"); + break; + + case "-O2": + case "--inline-msg-send": + argv.shift(); + (OBJJ_COMPILER_FLAGS || (OBJJ_COMPILER_FLAGS = [])).push("InlineMsgSend"); + 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 +191,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 +271,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..6f761e3a5 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; } @@ -166,13 +187,17 @@ function resolveFlags(args) objjcFlags &= ~ObjectiveJ.ObjJAcornCompiler.Flags.CheckSyntax; else if (argument.indexOf("-T") === 0) - objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures; + objjcFlags &= ~ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures; else if (argument.indexOf("-g") === 0) objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.IncludeDebugSymbols; - else if (argument.indexOf("-O") === 0) + else if (argument.indexOf("-O") === 0) { objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.Compress; + // FIXME: currently we are sending in '-O2' when we want InlineMsgSend. Here we only check if we it is '-O...' + if (argument.length > 2) + objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.InlineMsgSend; + } else if (argument.indexOf("-G") === 0) objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.Generate; @@ -234,12 +259,16 @@ exports.main = function(args) if (argv[0] === "--help" || argv[0].substr(0, 1) == '-') { print("Usage (objjc 2.0): " + args[0] + " [options] [--] file..."); - print(" -p, --print print the output directly to stdout"); - print(" --unmarked don't tag the output with @STATIC header"); + print(" -p, --print print the output directly to stdout"); + print(" --unmarked don't tag the output with @STATIC header"); print(""); - print(" -T, --includeTypeSignatures include type signatures in the compiled output"); + print(" -T, --dont-include-type-signatures include type signatures in the compiled output"); + print(" -g, --include-debug-symbols include debug symbols in the compiled output"); + print(" -T, --include-type-signatures include type signatures in the compiled output"); + print(" -O, --compress compress the compiled output"); + print(" -O2, --inline-msg-send inline objj_msgSend function in the compiled output"); print(""); - print(" --help print this help"); + print(" --help print this help"); return; } 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/CommonJS/lib/objective-j/jake/bundletask.js b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js index e71b9129f..613d9b254 100644 --- a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js +++ b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js @@ -907,7 +907,7 @@ BundleTask.prototype.defineSourceTasks = function() basePath = absolutePath.substring(0, absolutePath.length - theTranslatedFilename.length); // Here we set the current compiler flags so the load system will know what compiler flags to use - ObjectiveJ.setCurrentCompilerFlags(environmentCompilerFlags); + ObjectiveJ.setCurrentGccCompilerFlags(environmentCompilerFlags); // Here we tell the CFBundle to load frameworks for the current build enviroment and not the enviroment that is running CFBundle.environments = function() {return [anEnvironment.name(), "ObjJ"]}; ObjectiveJ.make_narwhal_factory(absolutePath, basePath, translateFilenameToPath)(require, e, module, system, print); diff --git a/Objective-J/Debug.js b/Objective-J/Debug.js index 532afc6f2..d8583f634 100644 --- a/Objective-J/Debug.js +++ b/Objective-J/Debug.js @@ -185,7 +185,7 @@ GLOBAL(objj_typecheck_decorator) = function(msgSend) if (!aReceiver) return msgSend.apply(this, arguments); - var types = aReceiver.isa.method_dtable[aSelector].types; + var types = aReceiver.isa.method_dtable[aSelector].method_types; for (var i = 2; i < arguments.length; i++) { try diff --git a/Objective-J/FileExecutable.js b/Objective-J/FileExecutable.js index 8e9bcac7a..a3b471a7e 100644 --- a/Objective-J/FileExecutable.js +++ b/Objective-J/FileExecutable.js @@ -41,7 +41,7 @@ function FileExecutable(/*CFURL|String*/ aURL, /*Dictionary*/ aFilenameTranslate if (fileContents.match(/^@STATIC;/)) executable = decompile(fileContents, aURL); else if ((extension === "j" || !extension) && !fileContents.match(/^{/)) - executable = exports.ObjJAcornCompiler.compileFileDependencies(fileContents, aURL, ObjJAcornCompiler.Flags.IncludeDebugSymbols); + executable = exports.ObjJAcornCompiler.compileFileDependencies(fileContents, aURL, exports.currentCompilerFlags()); else executable = new Executable(fileContents, [], aURL); diff --git a/Objective-J/Jakefile b/Objective-J/Jakefile index ca5bfeda9..5c5ef03ca 100644 --- a/Objective-J/Jakefile +++ b/Objective-J/Jakefile @@ -32,7 +32,7 @@ $BROWSER_FILE = FILE.join("Browser", "Objective-J.js"); $BUILD_OBJECTIVE_J = FILE.join($BUILD_CONFIGURATION_DIR, "Objective-J"); $BUILD_BROWSER_FILE = FILE.join($BUILD_OBJECTIVE_J, "Objective-J.js"); -$INCLUDE_FLAGS = ["-I" + FILE.cwd()]; +$INCLUDE_FLAGS = ["'-I" + FILE.cwd() + "'"]; $DEBUG_FLAGS = $CONFIGURATION === "Debug" ? ["-DDEBUG=1"] : [""]; $OBJECTIVEJ_FILES = new FileList("*.js"); @@ -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..fb53b2481 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -365,8 +365,6 @@ var MethodDef = function(name, types) this.types = types; } -var currentCompilerFlags = ""; - var reservedIdentifiers = exports.acorn.makePredicate("self _cmd undefined localStorage arguments"); var wordPrefixOperators = exports.acorn.makePredicate("delete in instanceof new typeof void"); @@ -394,25 +392,46 @@ 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; } this.dependencies = []; - this.flags = flags | ObjJAcornCompiler.Flags.IncludeDebugSymbols; + this.flags = flags & (ObjJAcornCompiler.Flags.IncludeDebugSymbols | ObjJAcornCompiler.Flags.InlineMsgSend | ObjJAcornCompiler.Flags.IncludeTypeSignatures); this.classDefs = classDefs ? classDefs : Object.create(null); this.protocolDefs = protocolDefs ? protocolDefs : Object.create(null); this.typeDefs = typeDefs ? typeDefs : Object.create(null); this.lastPos = 0; - if (currentCompilerFlags & ObjJAcornCompiler.Flags.Generate) - this.generate = true; - this.generate = true; + this.generate = true; // Before there was an option to generate the code or copy & paste it from the source. Today we always generate the code. compile(this.tokens, new Scope(null ,{ compiler: this }), pass === 2 ? pass2 : pass1); } +ObjJAcornCompiler.Flags = { }; + +ObjJAcornCompiler.Flags.IncludeDebugSymbols = 1 << 0; +ObjJAcornCompiler.Flags.IncludeTypeSignatures = 1 << 1; +ObjJAcornCompiler.Flags.Generate = 1 << 2; +ObjJAcornCompiler.Flags.InlineMsgSend = 1 << 3; + +var currentCompilerFlags = ObjJAcornCompiler.Flags.IncludeTypeSignatures; +var currentGccCompilerFlags = ""; + exports.ObjJAcornCompiler = ObjJAcornCompiler; exports.ObjJAcornCompiler.compileToExecutable = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags) @@ -434,6 +453,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,19 +463,72 @@ 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(); } -var currentCompilerFlags = ""; +exports.setCurrentGccCompilerFlags = function(/*String*/ compilerFlags) +{ + if (currentGccCompilerFlags === compilerFlags) return; + + currentGccCompilerFlags = compilerFlags; + + var args = compilerFlags.split(" "), + count = args.length, + objjcFlags = ObjJAcornCompiler.Flags.IncludeTypeSignatures; + + for (var index = 0; index < count; ++index) + { + var argument = args[index]; + + if (argument.indexOf("-g") === 0) + objjcFlags |= ObjJAcornCompiler.Flags.IncludeDebugSymbols; + else if (argument.indexOf("-O") === 0) { + objjcFlags |= ObjJAcornCompiler.Flags.Compress; + // FIXME: currently we are sending in '-O2' when we want InlineMsgSend. Here we only check if it is '-O...'. + // Maybe we should have some other option for this + if (argument.length > 2) + objjcFlags |= ObjJAcornCompiler.Flags.InlineMsgSend; + } + else if (argument.indexOf("-G") === 0) + objjcFlags |= ObjJAcornCompiler.Flags.Generate; + else if (argument.indexOf("-T") === 0) + objjcFlags &= ~ObjJAcornCompiler.Flags.IncludeTypeSignatures; + } + + currentCompilerFlags = objjcFlags; +} + +exports.currentGccCompilerFlags = function(/*String*/ compilerFlags) +{ + return currentGccCompilerFlags; +} exports.setCurrentCompilerFlags = function(/*String*/ compilerFlags) { @@ -466,12 +540,6 @@ exports.currentCompilerFlags = function(/*String*/ compilerFlags) return currentCompilerFlags; } -ObjJAcornCompiler.Flags = { }; - -ObjJAcornCompiler.Flags.IncludeDebugSymbols = 1 << 0; -ObjJAcornCompiler.Flags.IncludeTypeSignatures = 1 << 1; -ObjJAcornCompiler.Flags.Generate = 1 << 2; - ObjJAcornCompiler.prototype.addWarning = function(/* Warning */ aWarning) { this.warnings.push(aWarning); @@ -660,9 +728,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) @@ -1589,64 +1661,170 @@ Literal: function(node, st, c) { }, ArrayLiteral: function(node, st, c) { var compiler = st.compiler, - generate = compiler.generate; + generate = compiler.generate, + buffer = compiler.jsBuffer; + if (!generate) { - compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, node.start)); + buffer.concat(compiler.source.substring(compiler.lastPos, node.start)); compiler.lastPos = node.start; } if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. + if (!st.receiverLevel) st.receiverLevel = 0; if (!node.elements.length) { - compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPArray, \"alloc\"), \"init\")"); + if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = (CPArray.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPArray, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : (___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.method_msgSend[\"init\"] || _objj_forward)(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"init\"))"); + } else { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = CPArray.isa.objj_msgSend0(CPArray, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.objj_msgSend0(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"init\"))"); + } + + if (!(st.maxReceiverLevel >= st.receiverLevel)) + st.maxReceiverLevel = st.receiverLevel; } else { - compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPArray, \"alloc\"), \"initWithObjects:count:\", ["); + if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = (CPArray.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPArray, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : (___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.method_msgSend[\"initWithObjects:count:\"] || _objj_forward)(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"initWithObjects:count:\", ["); + } else { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = CPArray.isa.objj_msgSend0(CPArray, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.objj_msgSend2(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"initWithObjects:count:\", ["); + } + + if (!(st.maxReceiverLevel >= st.receiverLevel)) + st.maxReceiverLevel = st.receiverLevel; + for (var i = 0; i < node.elements.length; i++) { var elt = node.elements[i]; if (i) - compiler.jsBuffer.concat(", "); + buffer.concat(", "); if (!generate) compiler.lastPos = elt.start; c(elt, st, "Expression"); - if (!generate) compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, elt.end)); + if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, elt.end)); } - compiler.jsBuffer.concat("], " + node.elements.length + ")"); + buffer.concat("], " + node.elements.length + "))"); } + st.receiverLevel--; if (!generate) compiler.lastPos = node.end; }, DictionaryLiteral: function(node, st, c) { var compiler = st.compiler, - generate = compiler.generate; + generate = compiler.generate, + buffer = compiler.jsBuffer, + noOfKeys = node.keys.length; + if (!generate) { - compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, node.start)); + buffer.concat(compiler.source.substring(compiler.lastPos, node.start)); compiler.lastPos = node.start; } if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. - if (!node.keys.length) { - compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPDictionary, \"alloc\"), \"init\")"); + if (!st.receiverLevel) st.receiverLevel = 0; + if (!noOfKeys) { + if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = (CPDictionary.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPDictionary, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : (___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.method_msgSend[\"init\"] || _objj_forward)(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"init\"))"); + } else { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = CPDictionary.isa.objj_msgSend0(CPDictionary, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.objj_msgSend0(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"init\"))"); + } + + if (!(st.maxReceiverLevel >= st.receiverLevel)) + st.maxReceiverLevel = st.receiverLevel; } else { - compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPDictionary, \"alloc\"), \"initWithObjectsAndKeys:\""); - for (var i = 0; i < node.keys.length; i++) { - var key = node.keys[i], - value = node.values[i]; + if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = (CPDictionary.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPDictionary, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : (___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.method_msgSend[\"initWithObjects:forKeys:\"] || _objj_forward)(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"initWithObjects:forKeys:\", ["); + } else { + buffer.concat("(___r"); + buffer.concat(++st.receiverLevel + ""); + buffer.concat(" = CPDictionary.isa.objj_msgSend0(CPDictionary, \"alloc\"), ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(" == null ? null : ___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(".isa.objj_msgSend2(___r"); + buffer.concat(st.receiverLevel + ""); + buffer.concat(", \"initWithObjects:forKeys:\", ["); + } - compiler.jsBuffer.concat(", "); + if (!(st.maxReceiverLevel >= st.receiverLevel)) + st.maxReceiverLevel = st.receiverLevel; + for (var i = 0; i < noOfKeys; i++) { + var value = node.values[i]; + + if (i) buffer.concat(", "); if (!generate) compiler.lastPos = value.start; c(value, st, "Expression"); - if (!generate) compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, value.end)); + if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, value.end)); + } - compiler.jsBuffer.concat(", "); + buffer.concat("], ["); + for (var i = 0; i < noOfKeys; i++) { + var key = node.keys[i]; + + if (i) buffer.concat(", "); if (!generate) compiler.lastPos = key.start; c(key, st, "Expression"); - if (!generate) compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, key.end)); + if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, key.end)); } - compiler.jsBuffer.concat(")"); + buffer.concat("]))"); } + st.receiverLevel--; if (!generate) compiler.lastPos = node.end; }, ImportStatement: function(node, st, c) { @@ -2147,7 +2325,7 @@ MethodDeclarationStatement: function(node, st, c) { compiler.jsBuffer.concat("Nil\n"); } - if (compiler.flags & ObjJAcornCompiler.Flags.IncludeDebugSymbols) + if (compiler.flags & ObjJAcornCompiler.Flags.IncludeTypeSignatures) compiler.jsBuffer.concat(","+JSON.stringify(types)); compiler.jsBuffer.concat(")"); @@ -2220,17 +2398,48 @@ MethodDeclarationStatement: function(node, st, c) { MessageSendExpression: function(node, st, c) { var compiler = st.compiler, generate = compiler.generate, + inlineMsgSend = compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend, buffer = compiler.jsBuffer, - nodeObject = node.object; + nodeObject = node.object, + selectors = node.selectors, + arguments = node.arguments, + argumentsLength = arguments.length, + firstSelector = selectors[0], + selector = firstSelector ? firstSelector.name : ""; // There is always at least one selector + + // Put together the selector. Maybe this should be done in the parser... + for (var i = 0; i < argumentsLength; i++) + if (i === 0) + selector += ":"; + else + selector += (selectors[i] ? selectors[i].name : "") + ":"; + if (!generate) { buffer.concat(compiler.source.substring(compiler.lastPos, node.start)); compiler.lastPos = nodeObject ? nodeObject.start : node.arguments.length ? node.arguments[0].start : node.end; + } else if (!inlineMsgSend) { + // Find out the total number of arguments so we can choose appropriate msgSend function. Only needed if call the function and not inline it + var totalNoOfParameters = argumentsLength; + + if (node.parameters) + totalNoOfParameters += node.parameters.length; } if (node.superObject) { if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. - buffer.concat("objj_msgSendSuper("); - buffer.concat("{ receiver:self, super_class:" + (st.currentMethodType() === "+" ? compiler.currentSuperMetaClass : compiler.currentSuperClass ) + " }"); + if (inlineMsgSend) { + buffer.concat("("); + buffer.concat(st.currentMethodType() === "+" ? compiler.currentSuperMetaClass : compiler.currentSuperClass); + buffer.concat(".method_dtable[\""); + buffer.concat(selector); + buffer.concat("\"] || _objj_forward)(self"); + } else { + buffer.concat("objj_msgSendSuper"); + if (totalNoOfParameters < 4) { + buffer.concat("" + totalNoOfParameters); + } + buffer.concat("({ receiver:self, super_class:" + (st.currentMethodType() === "+" ? compiler.currentSuperMetaClass : compiler.currentSuperClass ) + " }"); + } } else { @@ -2256,6 +2465,8 @@ MessageSendExpression: function(node, st, c) { c(nodeObject, st, "Expression"); buffer.concat(" == null ? null : "); } + if (inlineMsgSend) + buffer.concat("("); c(nodeObject, st, "Expression"); } else { receiverIsNotSelf = true; @@ -2266,12 +2477,20 @@ MessageSendExpression: function(node, st, c) { c(nodeObject, st, "Expression"); buffer.concat("), ___r"); buffer.concat(st.receiverLevel + ""); - buffer.concat(" == null ? null : ___r"); + buffer.concat(" == null ? null : "); + if (inlineMsgSend) + buffer.concat("("); + buffer.concat("___r"); buffer.concat(st.receiverLevel + ""); if (!(st.maxReceiverLevel >= st.receiverLevel)) st.maxReceiverLevel = st.receiverLevel; } - buffer.concat(".isa.objj_msgSend"); + if (inlineMsgSend) { + buffer.concat(".isa.method_msgSend[\""); + buffer.concat(selector); + buffer.concat("\"] || _objj_forward)"); + } else + buffer.concat(".isa.objj_msgSend"); } else { buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression. buffer.concat("objj_msgSend("); @@ -2279,19 +2498,11 @@ MessageSendExpression: function(node, st, c) { } } - var selectors = node.selectors, - arguments = node.arguments, - argumentsLength = arguments.length, - firstSelector = selectors[0], - selector = firstSelector ? firstSelector.name : ""; // There is always at least one selector - if (generate && !node.superObject) { - var totalNoOfParameters = argumentsLength; - - if (node.parameters) - totalNoOfParameters += node.parameters.length; - if (totalNoOfParameters < 4) { - buffer.concat("" + totalNoOfParameters); + if (!inlineMsgSend) { + if (totalNoOfParameters < 4) { + buffer.concat("" + totalNoOfParameters); + } } if (receiverIsIdentifier) { @@ -2303,13 +2514,6 @@ MessageSendExpression: function(node, st, c) { } } - // Put together the selector. Maybe this should be done in the parser... - for (var i = 0; i < argumentsLength; i++) - if (i === 0) - selector += ":"; - else - selector += (selectors[i] ? selectors[i].name : "") + ":"; - buffer.concat(", \""); buffer.concat(selector); // FIXME: sel_getUid(selector + "") ? This FIXME is from the old preprocessor compiler buffer.concat("\""); diff --git a/Objective-J/Runtime.js b/Objective-J/Runtime.js index e352cf3e1..2229a6e82 100644 --- a/Objective-J/Runtime.js +++ b/Objective-J/Runtime.js @@ -49,9 +49,12 @@ GLOBAL(objj_ivar) = function(/*String*/ aName, /*String*/ aType) GLOBAL(objj_method) = function(/*String*/ aName, /*IMP*/ anImplementation, /*Array*/ types) { - this.name = aName; - this.method_imp = anImplementation; - this.types = types; + var method = anImplementation || function(/*id*/ aReceiver, /*SEL*/ aSelector) {CPException.isa.objj_msgSend2(CPException, "raise:reason:", CPInternalInconsistencyException, aReceiver.isa.method_msgSend0(self, "className") + " does not have an implementation for selector '" + aSelector + "'")}; + method.method_name = aName; + method.method_imp = anImplementation; + method.method_types = types; + + return method; } GLOBAL(objj_class) = function(displayName) @@ -197,7 +200,7 @@ GLOBAL(class_addMethod) = function(/*Class*/ aClass, /*SEL*/ aName, /*IMP*/ anIm #if DEBUG // Give this function a "pretty" name for the console. - method.method_imp.displayName = METHOD_DISPLAY_NAME(aClass, method); + method.displayName = METHOD_DISPLAY_NAME(aClass, method); #endif // FIXME: Should this be done here? @@ -222,11 +225,11 @@ GLOBAL(class_addMethods) = function(/*Class*/ aClass, /*Array*/ methods) // FIXME: Don't do it if it exists? method_list.push(method); - method_dtable[method.name] = method; + method_dtable[method.method_name] = method; #if DEBUG // Give this function a "pretty" name for the console. - method.method_imp.displayName = METHOD_DISPLAY_NAME(aClass, method); + method.displayName = METHOD_DISPLAY_NAME(aClass, method); #endif } @@ -292,12 +295,22 @@ GLOBAL(class_replaceMethod) = function(/*Class*/ aClass, /*SEL*/ aSelector, /*IM return NULL; var method = aClass.method_dtable[aSelector], - method_imp = NULL; + method_imp = method.method_imp, + new_method = new objj_method(method.method_name, aMethodImplementation, method.method_types); - if (method) - method_imp = method.method_imp; + new_method.displayName = method.displayName; + aClass.method_dtable[aSelector] = new_method; - method.method_imp = aMethodImplementation; + var index = aClass.method_list.indexOf(method); + + if (index !== -1) + { + aClass.method_list[index] = new_method; + } + else + { + aClass.method_list.push(new_method); + } return method_imp; } @@ -419,7 +432,7 @@ GLOBAL(protocol_addMethodDescriptions) = function(/*Protocol*/ proto, /*Array*/ { var method = methods[index]; - method_dtable[method.name] = method; + method_dtable[method.method_name] = method; } } @@ -491,26 +504,43 @@ var _class_initialize = function(/*Class*/ aClass) meta.objj_msgSend2 = objj_msgSendFast2; meta.objj_msgSend3 = objj_msgSendFast3; + aClass.method_msgSend = aClass.method_dtable; + meta.method_msgSend = meta.method_dtable; + meta.objj_msgSend0(aClass, "initialize"); CHANGEINFO(meta, CLS_INITIALIZED, CLS_INITIALIZING); } } -var _objj_forward = function(self, _cmd) +GLOBAL(_objj_forward) = function(self, _cmd) { var isa = self.isa, - implementation = isa.method_dtable[SEL_forwardingTargetForSelector_]; + meta = GETMETA(isa); + + if (!GETINFO(meta, CLS_INITIALIZED) && !GETINFO(meta, CLS_INITIALIZING)) + { + _class_initialize(isa); + } + + var implementation = isa.method_msgSend[_cmd]; if (implementation) { - var target = implementation.method_imp.call(this, self, SEL_forwardingTargetForSelector_, _cmd); + return implementation.apply(isa, arguments); + } + + implementation = isa.method_dtable[SEL_forwardingTargetForSelector_]; + + if (implementation) + { + var target = implementation(self, SEL_forwardingTargetForSelector_, _cmd); if (target && target !== self) { arguments[0] = target; - return objj_msgSend.apply(this, arguments); + return target.isa.objj_msgSend.apply(target.isa, arguments); } } @@ -522,7 +552,7 @@ var _objj_forward = function(self, _cmd) if (forwardInvocationImplementation) { - var signature = implementation.method_imp.call(this, self, SEL_methodSignatureForSelector_, _cmd); + var signature = implementation(self, SEL_methodSignatureForSelector_, _cmd); if (signature) { @@ -541,7 +571,7 @@ var _objj_forward = function(self, _cmd) invocationIsa.objj_msgSend2(invocation, SEL_setArgument_atIndex_, arguments[index], index); } - forwardInvocationImplementation.method_imp.call(this, self, SEL_forwardInvocation_, invocation); + forwardInvocationImplementation(self, SEL_forwardInvocation_, invocation); return invocation == null ? null : invocationIsa.objj_msgSend0(invocation, SEL_returnValue); } @@ -552,7 +582,7 @@ var _objj_forward = function(self, _cmd) implementation = isa.method_dtable[SEL_doesNotRecognizeSelector_]; if (implementation) - return implementation.method_imp.call(this, self, SEL_doesNotRecognizeSelector_, _cmd); + return implementation(self, SEL_doesNotRecognizeSelector_, _cmd); throw class_getName(isa) + " does not implement doesNotRecognizeSelector:. Did you forget a superclass for " + class_getName(isa) + "?"; }; @@ -562,9 +592,7 @@ var _objj_forward = function(self, _cmd) if (!ISINITIALIZED(aClass))\ _class_initialize(aClass);\ \ - var method = aClass.method_dtable[aSelector];\ - \ - aMethodImplementation = method ? method.method_imp : _objj_forward; + aMethodImplementation = aClass.method_dtable[aSelector] || _objj_forward; GLOBAL(class_getMethodImplementation) = function(/*Class*/ aClass, /*SEL*/ aSelector) { @@ -845,11 +873,28 @@ GLOBAL(objj_msgSendSuper) = function(/*id*/ aSuper, /*SEL*/ aSelector) return implementation.apply(aSuper.receiver, arguments); } +GLOBAL(objj_msgSendSuper0) = function(/*id*/ aSuper, /*SEL*/ aSelector) +{ + return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector); +} + +GLOBAL(objj_msgSendSuper1) = function(/*id*/ aSuper, /*SEL*/ aSelector, arg0) +{ + return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector, arg0); +} + +GLOBAL(objj_msgSendSuper2) = function(/*id*/ aSuper, /*SEL*/ aSelector, arg0, arg1) +{ + return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector, arg0, arg1); +} + +GLOBAL(objj_msgSendSuper3) = function(/*id*/ aSuper, /*SEL*/ aSelector, arg0, arg1, arg2) +{ + return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector, arg0, arg1, arg2); +} + GLOBAL(objj_msgSendFast) = function(/*id*/ aReceiver, /*SEL*/ aSelector) { - var method = this.method_dtable[aSelector], - implementation = method ? method.method_imp : _objj_forward; - #ifdef MAXIMUM_RECURSION_CHECKS if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) throw new Error("Maximum call stack depth exceeded."); @@ -857,7 +902,7 @@ GLOBAL(objj_msgSendFast) = function(/*id*/ aReceiver, /*SEL*/ aSelector) try { #endif - return implementation.apply(aReceiver, arguments); + return (this.method_dtable[aSelector] || _objj_forward).apply(aReceiver, arguments); #ifdef MAXIMUM_RECURSION_CHECKS } finally { @@ -874,9 +919,6 @@ var objj_msgSendFastInitialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) GLOBAL(objj_msgSendFast0) = function(/*id*/ aReceiver, /*SEL*/ aSelector) { - var method = this.method_dtable[aSelector], - implementation = method ? method.method_imp : _objj_forward; - #ifdef MAXIMUM_RECURSION_CHECKS if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) throw new Error("Maximum call stack depth exceeded."); @@ -884,7 +926,7 @@ GLOBAL(objj_msgSendFast0) = function(/*id*/ aReceiver, /*SEL*/ aSelector) try { #endif - return implementation(aReceiver, aSelector); + return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector); #ifdef MAXIMUM_RECURSION_CHECKS } finally { @@ -901,9 +943,6 @@ var objj_msgSendFast0Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector) GLOBAL(objj_msgSendFast1) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) { - var method = this.method_dtable[aSelector], - implementation = method ? method.method_imp : _objj_forward; - #ifdef MAXIMUM_RECURSION_CHECKS if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) throw new Error("Maximum call stack depth exceeded."); @@ -911,7 +950,7 @@ GLOBAL(objj_msgSendFast1) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0) try { #endif - return implementation(aReceiver, aSelector, arg0); + return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector, arg0); #ifdef MAXIMUM_RECURSION_CHECKS } finally { @@ -928,9 +967,6 @@ var objj_msgSendFast1Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, GLOBAL(objj_msgSendFast2) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1) { - var method = this.method_dtable[aSelector], - implementation = method ? method.method_imp : _objj_forward; - #ifdef MAXIMUM_RECURSION_CHECKS if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) throw new Error("Maximum call stack depth exceeded."); @@ -938,7 +974,7 @@ GLOBAL(objj_msgSendFast2) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, try { #endif - return implementation(aReceiver, aSelector, arg0, arg1); + return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector, arg0, arg1); #ifdef MAXIMUM_RECURSION_CHECKS } finally { @@ -955,9 +991,6 @@ var objj_msgSendFast2Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, GLOBAL(objj_msgSendFast3) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2) { - var method = this.method_dtable[aSelector], - implementation = method ? method.method_imp : _objj_forward; - #ifdef MAXIMUM_RECURSION_CHECKS if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH) throw new Error("Maximum call stack depth exceeded."); @@ -965,7 +998,7 @@ GLOBAL(objj_msgSendFast3) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, try { #endif - return implementation(aReceiver, aSelector, arg0, arg1, arg2); + return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector, arg0, arg1, arg2); #ifdef MAXIMUM_RECURSION_CHECKS } finally { @@ -984,7 +1017,55 @@ var objj_msgSendFast3Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector, GLOBAL(method_getName) = function(/*Method*/ aMethod) { - return aMethod.name; + return aMethod.method_name; +} + +// This will not return correct values if the compiler does not have the option 'IncludeTypeSignatures' +GLOBAL(method_copyReturnType) = function(/*Method*/ aMethod) +{ + var types = aMethod.method_types; + + if (types) + { + var argType = types[0]; + + return argType != NULL ? argType : NULL; + } + else + return NULL; +} + +// This will not return correct values for index > 1 if the compiler does not have the option 'IncludeTypeSignatures' +GLOBAL(method_copyArgumentType) = function(/*Method*/ aMethod, /*unsigned int*/ index) +{ + switch (index) { + case 0: + return "id"; + + case 1: + return "SEL"; + + default: + var types = aMethod.method_types; + + if (types) + { + var argType = types[index - 1]; + + return argType != NULL ? argType : NULL; + } + else + return NULL; + } +} + +// Returns number of arguments for a method. The first argument is 'self' and the second is the selector. +// Those are followed by the method arguments. So for example it will return 2 for a method with no arguments. +GLOBAL(method_getNumberOfArguments) = function(/*Method*/ aMethod) +{ + var types = aMethod.method_types; + + return types ? types.length + 1 : ((aMethod.method_name.match(/:/g) || []).length + 2); } GLOBAL(method_getImplementation) = function(/*Method*/ aMethod) @@ -1050,6 +1131,7 @@ objj_class.prototype.objj_msgSend0 = objj_msgSendFast0Initialize; objj_class.prototype.objj_msgSend1 = objj_msgSendFast1Initialize; objj_class.prototype.objj_msgSend2 = objj_msgSendFast2Initialize; objj_class.prototype.objj_msgSend3 = objj_msgSendFast3Initialize; +objj_class.prototype.method_msgSend = Object.create(null); var SEL_description = sel_getUid("description"), SEL_forwardingTargetForSelector_ = sel_getUid("forwardingTargetForSelector:"), diff --git a/README.markdown b/README.markdown index 6d9fea48c..3883145f2 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) [![Join the chat at https://gitter.im/cappuccino/cappuccino](https://badges.gitter.im/cappuccino/cappuccino.svg)](https://gitter.im/cappuccino/cappuccino?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + Welcome to Cappuccino! ====================== @@ -13,7 +15,7 @@ with the complexities of traditional web technologies like HTML, CSS, or even the DOM. The unpleasantries of building complex cross browser applications are abstracted away for you. -For more information, see . +For more information, see . Follow [@cappuccino](https://twitter.com/cappuccino) on Twitter for updates on the project. System Requirements ------------------- @@ -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 176be1648..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]; } /*! 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 320ecb263..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. */ @@ -334,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 6d668742d..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"]; @@ -39,6 +40,8 @@ [_tabView addTabViewItem:_tabItem1]; [_tabView addTabViewItem:_tabItem2]; + + [[CPRunLoop currentRunLoop] performSelectors]; } - (void)testCreate @@ -93,4 +96,46 @@ [self assertNull:[_tabItem1 tabView]]; } +- (void)testInsertTabViewItem +{ + [_tabView selectTabViewItem:_tabItem2]; + + [self assert:[_tabView numberOfTabViewItems] equals:2]; + [self assert:[_tabView selectedTabViewItem] equals:_tabItem2]; + + var tabItem3 = [[CPTabViewItem alloc] initWithIdentifier:@"insert"]; + [tabItem3 setLabel:@"insert"]; + [_tabView insertTabViewItem:tabItem3 atIndex:0]; + + [self assert:[_tabView numberOfTabViewItems] equals:3]; + [self assert:[_tabView selectedTabViewItem] equals:_tabItem2]; + [self assert:[_tabView indexOfTabViewItem:tabItem3] equals:0]; +} + +- (void)testRemoveSelectedTabViewItem +{ + [_tabView selectTabViewItem:_tabItem2]; + + [self assert:[_tabView numberOfTabViewItems] equals:2]; + [self assert:[_tabView selectedTabViewItem] equals:_tabItem2]; + + [_tabView removeTabViewItem:_tabItem2]; + + [self assert:[_tabView numberOfTabViewItems] equals:1]; + [self assert:[_tabView selectedTabViewItem] equals:_tabItem1]; +} + +- (void)testRemoveSelectedFirstTabViewItem +{ + [_tabView selectTabViewItem:_tabItem1]; + + [self assert:[_tabView numberOfTabViewItems] equals:2]; + [self assert:[_tabView selectedTabViewItem] equals:_tabItem1]; + + [_tabView removeTabViewItem:_tabItem1]; + + [self assert:[_tabView numberOfTabViewItems] equals:1]; + [self assert:[_tabView selectedTabViewItem] equals:_tabItem2]; +} + @end 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 f14bfb6a7..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. diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j index 0c85d6ee9..f0e21e987 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}); @@ -50,20 +56,20 @@ - (void)testThemeAttributeValueForState { - var themeAttribute = [[_CPThemeAttribute alloc] initWithName:@"test" defaultValue:5]; + var themeAttribute = [[_CPThemeAttribute alloc] initWithName:@"test" defaultValue:5 defaultAttribute:nil]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 5) message:"Return the default value for the theme attribute if the theme attribute has no value defined for the given state"]; - [themeAttribute setValue:7 forState:CPThemeState("aState")]; + themeAttribute = [themeAttribute attributeBySettingValue:7 forState:CPThemeState("aState")]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 7) message:"Return the correct value for the state if the state is defined"]; - [themeAttribute setValue:8 forState:CPThemeState('normal')]; + themeAttribute = [themeAttribute attributeBySettingValue:8 forState:CPThemeState('normal')]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState1")] == 8) message:"Return the normal value for the state if the theme attribute has no value defined for the given state but has a value for the normal state defined"]; - [themeAttribute setValue:10 forState:CPThemeState('aState3+aState4')]; + themeAttribute = [themeAttribute attributeBySettingValue:10 forState:CPThemeState('aState3+aState4')]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState3")] == 8) message:"Return the normal value for the state if the state is only a partial match on the theme attributes defined states"]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState4+aState3")] == 10) message:"Correctly match combined states on the theme attribute"]; - [themeAttribute setValue:9 forState:CPThemeState('aState3')]; + themeAttribute = [themeAttribute attributeBySettingValue:9 forState:CPThemeState('aState3')]; [self assertTrue:([themeAttribute valueForState:CPThemeState("aState8+aState3+aState4")] == 10) message:"Return the largest partial subset match for a combined state that isn't a perfect match"]; } 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..383db1a99 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -1,10 +1,15 @@ - @import @import -[CPApplication sharedApplication] - var methodCalled; +var updateTrackingAreasCalls, + mouseEnteredCalls, + mouseExitedCalls, + mouseMovedCalls, + cursorUpdateCalls, + involvedViewForMouseEntered, + involvedViewForMouseExited, + involvedViewForCursorUpdate; @implementation CPViewTest : OJTestCase { @@ -18,6 +23,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()]; @@ -30,6 +38,7 @@ var methodCalled; [view3 setIdentifier:@"view3"]; methodCalled = []; + updateTrackingAreasCalls = 0; [super setUp]; } @@ -69,7 +78,7 @@ var methodCalled; [self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"CPView should be in state CPThemeStateDisabled"]; [self assertTrue:[view hasThemeState:CPThemeStateBordered] message:@"CPView should be in state CPThemeStateBordered"]; [self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] message:@"CPView should be in the combined state of CPThemeStateDisabled and CPThemeStateBordered"]; - [self assertTrue:[view hasThemeState:[CPThemeStateBordered, CPThemeStateDisabled]] message:@"hasThemeState works with an array argument"]; + [self assertTrue:[view hasThemeStates:[CPThemeStateBordered, CPThemeStateDisabled]] message:@"hasThemeState works with an array argument"]; [self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"]; } @@ -94,7 +103,7 @@ var methodCalled; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; [view unsetThemeState:[view themeState]]; - [view setThemeState:[CPThemeStateSelected, CPThemeStateDisabled]]; + [view setThemeStates:[CPThemeStateSelected, CPThemeStateDisabled]]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)) equals:String([view themeState]) message:@"setThemeState works with array argument"]; } @@ -117,20 +126,20 @@ var methodCalled; [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; - [view unsetThemeState:[CPThemeStateBordered, CPThemeStateHighlighted]]; + [view unsetThemeStates:[CPThemeStateBordered, CPThemeStateHighlighted]]; [self assert:String(CPThemeStateDisabled) equals:String([view themeState]) message:@"unsetThemeState works with array argument"]; [view setThemeState:CPThemeStateDisabled]; - [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [view unsetThemeStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has more theme states than the view currently has"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; - var returnValue = [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + var returnValue = [view unsetThemeStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; [self assert:String(CPThemeStateBordered) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has not entirely overlapping themestates"]; [self assertTrue:returnValue message:@"When unsetThemeState successfully unsets anything, it return YES"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; - var returnValue = [view unsetThemeState:[CPThemeStateSelected, CPThemeStateHighlighted]]; + var returnValue = [view unsetThemeStates:[CPThemeStateSelected, CPThemeStateHighlighted]]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)) equals:String([view themeState]) message:@"CPView not unset any theme states it does not have"]; [self assertFalse:returnValue message:@"When unsetThemeState doesn't unset anything, it returns NO"]; @@ -771,6 +780,874 @@ var methodCalled; [self assert:nil equals:view._toolTipFunctionOut]; } +- (void)testAppearanceDefaultvalue +{ + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [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]]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [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]]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [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]]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [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]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight] equals:[view effectiveAppearance]]; + [self assertTrue:[view hasThemeState:CPThemeStateAppearanceVibrantLight]]; + [self assertFalse:[view hasThemeState:CPThemeStateAppearanceVibrantDark]]; + + [viewB addSubview:view]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [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]]; +} + +// TrackingAreaAdditions + +- (void)testTrackingAreas +{ + var trackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect owner:self userInfo:nil]; + + [self assert:0 equals:[[view trackingAreas] count] message:@"Initially, a view has no tracking area"]; + + // + + [view addTrackingArea:trackingArea]; + [self assert:1 equals:[[view trackingAreas] count] message:@"After adding a tracking area"]; + [self assert:view equals:[trackingArea view] message:@"Tracking area should be linked to view"]; + + // + + [view removeTrackingArea:trackingArea]; + [self assert:0 equals:[[view trackingAreas] count] message:@"After removing the only tracking area"]; + [self assert:nil equals:[trackingArea view] message:@"Tracking area should be unlinked"]; + + // + + [view addTrackingArea:trackingArea]; + [view addTrackingArea:trackingArea]; + [view addTrackingArea:trackingArea]; + [self assert:1 equals:[[view trackingAreas] count] message:@"Adding the same tracking area multiple times should add it once"]; + [self assert:view equals:[trackingArea view] message:@"Tracking area should be linked to view"]; + + var trackingArea2 = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow owner:self userInfo:nil]; + + // + + [view addTrackingArea:trackingArea2]; + [self assert:2 equals:[[view trackingAreas] count] message:@"After adding a second tracking area"]; + [self assert:view equals:[trackingArea2 view] message:@"Tracking area should be linked to view"]; + + // + + [view removeAllTrackingAreas]; + [self assert:0 equals:[[view trackingAreas] count] message:@"After removing all tracking areas"]; + [self assert:nil equals:[trackingArea view] message:@"Tracking area should be unlinked"]; + [self assert:nil equals:[trackingArea2 view] message:@"Tracking area should be unlinked"]; + + // + + [view addTrackingArea:trackingArea]; + + var contentView = [window contentView]; + + [contentView addSubview:view]; + [self assert:0 equals:updateTrackingAreasCalls message:@"Putting a view with a CPTrackingAreaInVisibleRect in a window should not call updateTrackingAreas"]; + + [view removeFromSuperview]; + + // + + [view addTrackingArea:trackingArea2]; + [contentView addSubview:view]; + [self assert:1 equals:updateTrackingAreasCalls message:@"Putting a view with a non CPTrackingAreaInVisibleRect in a window should call updateTrackingAreas"]; + + [view removeAllTrackingAreas]; + + // + + var viewTA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMakeZero()]; + updateTrackingAreasCalls = 0; + + [contentView addSubview:viewTA]; + [self assert:1 equals:updateTrackingAreasCalls message:@"Putting a view with no tracking areas in a window should call updateTrackingAreas"]; + + // + + updateTrackingAreasCalls = 0; + + [viewTA addTrackingArea:trackingArea]; + [viewTA setFrame:CGRectMake(10, 10, 10, 10)]; + [self assert:0 equals:updateTrackingAreasCalls message:@"Changing geometry of a view with a CPTrackingAreaInVisibleRect should not call updateTrackingAreas"]; + + // + + updateTrackingAreasCalls = 0; + + [viewTA addTrackingArea:trackingArea2]; + [viewTA setFrame:CGRectMake(20, 20, 20, 20)]; + [self assert:1 equals:updateTrackingAreasCalls message:@"Changing geometry of a view with a non CPTrackingAreaInVisibleRect should call updateTrackingAreas"]; + + // + + var trackingAreaAll = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect owner:viewTA userInfo:nil]; + + [viewTA removeAllTrackingAreas]; + [viewTA addTrackingArea:trackingAreaAll]; + + // Mouse enters the tracking area + + [self moveMouseAtPoint:CGPointMake(21, 21) dragging:NO]; + + [self assert:1 equals:mouseEnteredCalls message:@"Mouse entering a tracking area should call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"Mouse entering a tracking area should not call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"Mouse entering a tracking area should not call mouseMoved"]; + [self assert:1 equals:cursorUpdateCalls message:@"Mouse entering a tracking area should call cursorUpdate"]; + + // Mouse moves in the tracking area + + [self moveMouseAtPoint:CGPointMake(22, 22) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"Mouse moving in a tracking area should not call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"Mouse moving in a tracking area should not call mouseExited"]; + [self assert:1 equals:mouseMovedCalls message:@"Mouse moving in a tracking area should call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"Mouse moving in a tracking area should not call cursorUpdate"]; + + // Mouse exits from the tracking area + + [self moveMouseAtPoint:CGPointMake(0, 0) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"Mouse exiting from a tracking area should not call mouseEntered"]; + [self assert:1 equals:mouseExitedCalls message:@"Mouse exiting from a tracking area should call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"Mouse exiting from a tracking area should not call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"Mouse exiting from a tracking area should not call cursorUpdate"]; + + // Mouse enters the tracking area while dragging + + [self moveMouseAtPoint:CGPointMake(21, 21) dragging:YES]; + + [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"]; + + // Mouse moves in the tracking area while dragging + + [self moveMouseAtPoint:CGPointMake(22, 22) dragging:YES]; + + [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"]; + + // Mouse exits from the tracking area while dragging + + [self moveMouseAtPoint:CGPointMake(0, 0) dragging:YES]; + + [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"]; + + // + + var trackingAreaAllWithDrag = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect | CPTrackingEnabledDuringMouseDrag owner:viewTA userInfo:nil]; + + [viewTA removeAllTrackingAreas]; + [viewTA addTrackingArea:trackingAreaAllWithDrag]; + + // Mouse enters the tracking area while dragging (option set) + + [self moveMouseAtPoint:CGPointMake(21, 21) dragging:YES]; + + [self assert:1 equals:mouseEnteredCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"]; + + // Mouse moves in the tracking area while dragging (option set) + + [self moveMouseAtPoint:CGPointMake(22, 22) dragging:YES]; + + [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"]; + + // Mouse exits from the tracking area while dragging (option set) + + [self moveMouseAtPoint:CGPointMake(0, 0) dragging:YES]; + + [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseEntered"]; + [self assert:1 equals:mouseExitedCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseMoved"]; + [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"]; + + // Nested views + + var innerViewTA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(5, 5, 10, 10)]; + + [viewTA addSubview:innerViewTA]; + + var innerTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect owner:innerViewTA userInfo:nil]; + + [innerViewTA addTrackingArea:innerTrackingArea]; + + // Mouse enters outer view + + [self moveMouseAtPoint:CGPointMake(21, 21) dragging:NO]; + + [self assert:1 equals:mouseEnteredCalls message:@"Mouse entering outer tracking area should call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"Mouse entering outer tracking area should not call mouseExited"]; + [self assert:0 equals:mouseMovedCalls message:@"Mouse entering outer tracking area should not call mouseMoved"]; + [self assert:1 equals:cursorUpdateCalls message:@"Mouse entering outer tracking area should call cursorUpdate"]; + + // Mouse enters inner view + + [self moveMouseAtPoint:CGPointMake(26, 26) dragging:NO]; + + [self assert:1 equals:mouseEnteredCalls message:@"Mouse entering inner tracking area should call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"Mouse entering inner tracking area should not call mouseExited"]; + [self assert:1 equals:mouseMovedCalls message:@"Mouse entering inner tracking area should call mouseMoved"]; + [self assert:1 equals:cursorUpdateCalls message:@"Mouse entering inner tracking area should call cursorUpdate"]; + + // Mouse moves in inner view + + [self moveMouseAtPoint:CGPointMake(27, 27) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"Mouse moving in inner tracking area should not call mouseEntered"]; + [self assert:0 equals:mouseExitedCalls message:@"Mouse moving in inner tracking area should not call mouseExited"]; + [self assert:2 equals:mouseMovedCalls message:@"Mouse moving in inner tracking area should call mouseMoved for both views"]; + [self assert:0 equals:cursorUpdateCalls message:@"Mouse moving in inner tracking area should not call cursorUpdate"]; + + // Mouse leaves inner view but remains in outer view + + [self moveMouseAtPoint:CGPointMake(36, 36) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"Mouse moving from inner to outer tracking area should not call mouseEntered"]; + [self assert:1 equals:mouseExitedCalls message:@"Mouse moving from inner to outer tracking area should call mouseExited (for inner)"]; + [self assert:1 equals:mouseMovedCalls message:@"Mouse moving from inner to outer tracking area should call mouseMoved (for outer)"]; + [self assert:1 equals:cursorUpdateCalls message:@"Mouse moving from inner to outer tracking area should call cursorUpdate (for outer)"]; + + [self assert:innerViewTA equals:involvedViewForMouseExited message:@"Inner view should receive mouseExited"]; + [self assert:viewTA equals:involvedViewForCursorUpdate message:@"Outer view should receive cursorUpdate"]; + + // Complex test for cursor update frontmost tracking area detection + + var viewA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(0, 30, 40, 40)], + viewB = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(30, 20, 40, 40)], + viewC = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(10, 0, 40, 40)]; + + [contentView setSubviews:[CPArray array]]; + [contentView addSubview:viewA]; + [contentView addSubview:viewB]; + [contentView addSubview:viewC]; + + var subviewA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(20, 0, 20, 20)], + subviewB = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)], + subviewC = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(0, 20, 40, 20)]; + + [viewA addSubview:subviewA]; + [viewB addSubview:subviewB]; + [viewC addSubview:subviewC]; + + var options = CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect, + options2 = CPTrackingMouseEnteredAndExited | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect, + options3 = CPTrackingCursorUpdate | CPTrackingActiveInActiveApp, + viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil], + viewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewB userInfo:nil], + viewCTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options2 owner:viewC userInfo:nil], + subviewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:subviewA userInfo:nil], + subviewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:subviewB userInfo:nil], + subviewCtrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMake(20, 0, 20, 20) options:options3 owner:subviewC userInfo:nil]; + + [viewA addTrackingArea:viewATrackingArea]; + [viewB addTrackingArea:viewBTrackingArea]; + [viewC addTrackingArea:viewCTrackingArea]; + + [subviewA addTrackingArea:subviewATrackingArea]; + [subviewB addTrackingArea:subviewBTrackingArea]; + [subviewC addTrackingArea:subviewCtrackingArea]; + + // Step 1 + + [self moveMouseAtPoint:CGPointMake(5, 25) dragging:NO]; + + [self assert:0 equals:cursorUpdateCalls message:@"Step 1 : no cursorUpdate should be called"]; + [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 1 : no view should be called for cursorUpdate"]; + + // Step 2 + + [self moveMouseAtPoint:CGPointMake(5, 35) dragging:NO]; + + [self assert:1 equals:cursorUpdateCalls message:@"Step 2 : 1 cursorUpdate should be called"]; + [self assert:viewA equals:involvedViewForCursorUpdate message:@"Step 2 : viewA should be called for cursorUpdate"]; + + // Step 3 + + [self moveMouseAtPoint:CGPointMake(15, 35) dragging:NO]; + + [self assert:0 equals:cursorUpdateCalls message:@"Step 3 : no cursorUpdate should be called"]; + [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 3 : no view should be called for cursorUpdate"]; + + // Step 4 + + [self moveMouseAtPoint:CGPointMake(25, 35) dragging:NO]; + + [self assert:1 equals:cursorUpdateCalls message:@"Step 4 : 1 cursorUpdate should be called"]; + [self assert:subviewA equals:involvedViewForCursorUpdate message:@"Step 4 : subviewA should be called for cursorUpdate"]; + + // Step 5 + + [self moveMouseAtPoint:CGPointMake(35, 35) dragging:NO]; + + [self assert:1 equals:cursorUpdateCalls message:@"Step 5 : 1 cursorUpdate should be called"]; + [self assert:subviewC equals:involvedViewForCursorUpdate message:@"Step 5 : subviewC should be called for cursorUpdate"]; + + // Step 6 + + [self moveMouseAtPoint:CGPointMake(45, 35) dragging:NO]; + + [self assert:0 equals:cursorUpdateCalls message:@"Step 6 : no cursorUpdate should be called"]; + [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 6 : no view should be called for cursorUpdate"]; + + // Step 7 + + [self moveMouseAtPoint:CGPointMake(55, 35) dragging:NO]; + + [self assert:1 equals:cursorUpdateCalls message:@"Step 7 : 1 cursorUpdate should be called"]; + [self assert:viewB equals:involvedViewForCursorUpdate message:@"Step 7 : viewB should be called for cursorUpdate"]; + + // Step 8 + + [self moveMouseAtPoint:CGPointMake(75, 35) dragging:NO]; + + [self assert:0 equals:cursorUpdateCalls message:@"Step 8 : no cursorUpdate should be called"]; + [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 8 : no view should be called for cursorUpdate"]; + + // Cursor tests + + var viewA = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(20, 20, 40, 40)], + viewB = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(10, 10, 80, 80)], + viewC = [[CPTrackingAreaViewWithoutCursorUpdate alloc] initWithFrame:CGRectMake(10, 10, 80, 80)]; + + [contentView setSubviews:[CPArray array]]; + [contentView addSubview:viewA]; + + var options = CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect; + + var viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil], + viewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewB userInfo:nil], + viewCTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewC userInfo:nil]; + + [viewA addTrackingArea:viewATrackingArea]; + [viewB addTrackingArea:viewBTrackingArea]; + [viewC addTrackingArea:viewCTrackingArea]; + + // Step 1.1 : outside the view + + [self moveMouseAtPoint:CGPointMake(10, 10) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.1 : cursor should be an arrow"]; + + // Step 1.2 : inside the view + + [self moveMouseAtPoint:CGPointMake(30, 30) dragging:NO]; + + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 1.2 : cursor should be a crosshair"]; + + // Step 1.3 : outside the view + + [self moveMouseAtPoint:CGPointMake(70, 70) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.3 : cursor should be an arrow"]; + + // Step 1.4 : inside the view with dragging + + [self moveMouseAtPoint:CGPointMake(30, 30) dragging:YES]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.4 : cursor should be an arrow"]; + + // Step 1.5 : mouse up (ends dragging) + + [self mouseUpAtPoint:CGPointMake(30, 30)]; + + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 1.5 : cursor should be a crosshair"]; + + // Step 1.6 : outside the view with dragging + + [self moveMouseAtPoint:CGPointMake(10, 10) dragging:YES]; + + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 1.6 : cursor should be a crosshair"]; + + // Step 1.7 : mouse up (ends dragging) + + [self mouseUpAtPoint:CGPointMake(10, 10)]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.7 : cursor should be an arrow"]; + + // + + [self moveMouseAtPoint:CGPointMake(1, 1) dragging:NO]; + + [viewA removeFromSuperview]; + [contentView addSubview:viewB]; + [viewB addSubview:viewA]; + + // Step 2.1 : outside the superview + + [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 2.1 : cursor should be an arrow"]; + + // Step 2.2 : inside the superview / outside the subview + + [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 2.2 : cursor should be an arrow"]; + + // Step 2.3 : inside the subview + + [self moveMouseAtPoint:CGPointMake(35, 35) dragging:NO]; + + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 2.3 : cursor should be a crosshair"]; + + // Step 2.4 : outside the subview / inside the superview + + [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO]; + + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 2.4 : cursor should be a crosshair"]; + + // Step 2.5 : outside the superview + + [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 2.5 : cursor should be an arrow"]; + + // + + [self moveMouseAtPoint:CGPointMake(1, 1) dragging:NO]; + + [viewA removeFromSuperview]; + [viewB removeFromSuperview]; + [contentView addSubview:viewC]; + [viewC addSubview:viewA]; + + // Step 3.1 : outside the superview + + [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.1 : cursor should be an arrow"]; + + // Step 3.2 : inside the superview / outside the subview + + [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.2 : cursor should be an arrow"]; + + // Step 3.3 : inside the subview + + [self moveMouseAtPoint:CGPointMake(35, 35) dragging:NO]; + + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 3.3 : cursor should be a crosshair"]; + + // Step 3.4 : outside the subview / inside the superview + + [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.4 : cursor should be an arrow"]; + + // Step 3.5 : outside the superview + + [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO]; + + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.5 : cursor should be an arrow"]; + +} + +- (void)testTrackingAreasLiveViewHierarchyModification +{ + // 1. viewB inside viewA with mouseEntered removing itself + + var viewA = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(20, 20, 40, 40)] + viewB = [[CPTrackingAreaViewLiveRemoval alloc] initWithFrame:CGRectMake(10, 10, 20, 20)]; + + [[window contentView] setSubviews:[CPArray arrayWithObject:viewA]]; + [viewA addSubview:viewB]; + + var options = CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect, + viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil], + viewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewB userInfo:nil]; + + [viewA addTrackingArea:viewATrackingArea]; + [viewB addTrackingArea:viewBTrackingArea]; + + // Step 1.1 : enter viewA + + [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO]; + + [self assert:1 equals:mouseEnteredCalls message:@"1.1 There should be one and only one mouseEntered call"]; + [self assert:0 equals:mouseExitedCalls message:@"1.1 There should be no mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"1.1 There should be no mouseMoved call"]; + [self assert:1 equals:cursorUpdateCalls message:@"1.1 There should be one and only one cursorUpdate call"]; + + [self assert:viewA equals:involvedViewForMouseEntered message:@"1.1 viewA should receive mouseEntered"]; + [self assert:viewA equals:involvedViewForCursorUpdate message:@"1.1 viewA should receive cursorUpdate"]; + + // Step 1.2 : enter viewB + + [self moveMouseAtPoint:CGPointMake(40, 40) dragging:NO]; + + [self assert:1 equals:mouseEnteredCalls message:@"1.2 There should be one and only one mouseEntered call"]; + [self assert:0 equals:mouseExitedCalls message:@"1.2 There should be no mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"1.2 There should be no mouseMoved call"]; + [self assert:0 equals:cursorUpdateCalls message:@"1.2 There should be no cursorUpdate call"]; + + [self assert:viewB equals:involvedViewForMouseEntered message:@"1.2 viewB should receive mouseEntered"]; + + // Step 1.3 : move back to viewA (there should be no more viewB) + + [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"1.3 There should be no mouseEntered call"]; + [self assert:0 equals:mouseExitedCalls message:@"1.3 There should be no mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"1.3 There should be no mouseMoved call"]; + [self assert:1 equals:cursorUpdateCalls message:@"1.3 There should be one and only one cursorUpdate call"]; + + [self assert:viewA equals:involvedViewForCursorUpdate message:@"1.3 viewA should receive cursorUpdate"]; + + // Step 1.4 : exit viewA + + [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"1.4 There should be one and only one mouseEntered call"]; + [self assert:1 equals:mouseExitedCalls message:@"1.4 There should be one and only on mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"1.4 There should be no mouseMoved call"]; + [self assert:0 equals:cursorUpdateCalls message:@"1.4 There should be no cursorUpdate call"]; + + [self assert:viewA equals:involvedViewForMouseExited message:@"1.4 viewA should receive mouseExited"]; + + // 2. viewA with mouseEntered adding viewB inside it. Testing if viewB receive mouseEntered & cursorUpdate + + var viewA = [[CPTrackingAreaViewLiveAddition alloc] initWithFrame:CGRectMake(20, 20, 40, 40)]; + + [[window contentView] setSubviews:[CPArray arrayWithObject:viewA]]; + + var options = CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect, + viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil]; + + [viewA addTrackingArea:viewATrackingArea]; + + // Step 2.1 : enter viewA (then add viewB thus enter also viewB) + + [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO]; + + [self assert:2 equals:mouseEnteredCalls message:@"2.1 There should be two mouseEntered calls"]; + [self assert:0 equals:mouseExitedCalls message:@"2.1 There should be no mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"2.1 There should be no mouseMoved call"]; + [self assert:2 equals:cursorUpdateCalls message:@"2.1 There should be two cursorUpdate calls"]; + + [self assert:[[viewA subviews] firstObject] equals:involvedViewForMouseEntered message:@"2.1 viewB should receive mouseEntered"]; + [self assert:[[viewA subviews] firstObject] equals:involvedViewForCursorUpdate message:@"2.1 viewB should receive cursorUpdate"]; + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"2.1 Final cursor should be crosshair cursor, determined by viewB"]; + + // Step 2.2 : exit viewA (thus also viewB) + + [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"2.2 There should be no mouseEntered calls"]; + [self assert:2 equals:mouseExitedCalls message:@"2.2 There should be two mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"2.2 There should be no mouseMoved call"]; + [self assert:0 equals:cursorUpdateCalls message:@"2.2 There should be no cursorUpdate calls"]; + + [self assert:[[viewA subviews] firstObject] equals:involvedViewForMouseExited message:@"2.2 viewB should receive mouseExited"]; + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"2.2 Cursor should be an arrow"]; + + // 3. viewA with mouseEntered adding viewB inside it BUT with CPTrackingAssumeInside. Testing if viewB receive only cursorUpdate + + var viewA = [[CPTrackingAreaViewLiveAddition2 alloc] initWithFrame:CGRectMake(20, 20, 40, 40)]; + + [[window contentView] setSubviews:[CPArray arrayWithObject:viewA]]; + + var options = CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect, + viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil]; + + [viewA addTrackingArea:viewATrackingArea]; + + // Step 3.1 : enter viewA (then add viewB thus enter also viewB) + + [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO]; + + [self assert:1 equals:mouseEnteredCalls message:@"3.1 There should be two mouseEntered calls"]; + [self assert:0 equals:mouseExitedCalls message:@"3.1 There should be no mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"3.1 There should be no mouseMoved call"]; + [self assert:2 equals:cursorUpdateCalls message:@"3.1 There should be two cursorUpdate calls"]; + + [self assert:viewA equals:involvedViewForMouseEntered message:@"3.1 viewB should receive mouseEntered"]; + [self assert:[[viewA subviews] firstObject] equals:involvedViewForCursorUpdate message:@"3.1 viewB should receive cursorUpdate"]; + [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"3.1 Final cursor should be crosshair cursor, determined by viewB"]; + + // Step 3.2 : exit viewA (thus also viewB) + + [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO]; + + [self assert:0 equals:mouseEnteredCalls message:@"3.2 There should be no mouseEntered calls"]; + [self assert:2 equals:mouseExitedCalls message:@"3.2 There should be two mouseExited call"]; + [self assert:0 equals:mouseMovedCalls message:@"3.2 There should be no mouseMoved call"]; + [self assert:0 equals:cursorUpdateCalls message:@"3.2 There should be no cursorUpdate calls"]; + + [self assert:[[viewA subviews] firstObject] equals:involvedViewForMouseExited message:@"3.2 viewB should receive mouseExited"]; + [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"3.2 Cursor should be an arrow"]; +} + +- (void)updateTrackingAreas +{ + updateTrackingAreasCalls++; +} + +- (void)resetCounters +{ + mouseEnteredCalls = 0; + mouseExitedCalls = 0; + mouseMovedCalls = 0; + cursorUpdateCalls = 0; + + involvedViewForMouseEntered = nil; + involvedViewForMouseExited = nil; + involvedViewForCursorUpdate = nil; +} + +- (void)moveMouseAtPoint:(CGPoint)aPoint dragging:(BOOL)dragging +{ + var anEvent = [CPEvent mouseEventWithType:(dragging ? CPLeftMouseDragged : CPMouseMoved) + location:aPoint + modifierFlags:0 + timestamp:0 + windowNumber:[window windowNumber] + context:nil + eventNumber:-1 + clickCount:0 + pressure:0]; + + [self resetCounters]; + + [[CPApplication sharedApplication] sendEvent:anEvent]; +} + +- (void)mouseUpAtPoint:(CGPoint)aPoint +{ + var anEvent = [CPEvent mouseEventWithType:CPLeftMouseUp + location:aPoint + modifierFlags:0 + timestamp:0 + windowNumber:[window windowNumber] + context:nil + eventNumber:-1 + clickCount:0 + pressure:0]; + + [self resetCounters]; + + [[CPApplication sharedApplication] sendEvent:anEvent]; +} + +@end + +@implementation CPTrackingAreaView : CPView + +- (void)mouseEntered:(CPEvent)anEvent +{ + mouseEnteredCalls++; + involvedViewForMouseEntered = [[anEvent trackingArea] view]; +} + +- (void)mouseExited:(CPEvent)anEvent +{ + mouseExitedCalls++; + involvedViewForMouseExited = [[anEvent trackingArea] view]; +} + +- (void)mouseMoved:(CPEvent)anEvent +{ + mouseMovedCalls++; +} + +- (void)cursorUpdate:(CPEvent)anEvent +{ + cursorUpdateCalls++; + involvedViewForCursorUpdate = [[anEvent trackingArea] view]; +} + +- (void)updateTrackingAreas +{ + updateTrackingAreasCalls++; +} + +@end + +@implementation CPTrackingAreaViewWithCursorUpdate : CPTrackingAreaView + +- (void)cursorUpdate:(CPEvent)anEvent +{ + [[CPCursor crosshairCursor] set]; + [super cursorUpdate:anEvent]; +} + +@end + +@implementation CPTrackingAreaViewWithoutCursorUpdate : CPView + +@end + +@implementation CPTrackingAreaViewLiveRemoval : CPTrackingAreaView + +- (void)cursorUpdate:(CPEvent)anEvent +{ + [[CPCursor pointingHandCursor] set]; + [super cursorUpdate:anEvent]; +} + +- (void)mouseEntered:(CPEvent)anEvent +{ + [self removeFromSuperview]; + [super mouseEntered:anEvent]; +} + +@end + +@implementation CPTrackingAreaViewLiveAddition : CPTrackingAreaView + +- (void)cursorUpdate:(CPEvent)anEvent +{ + [[CPCursor pointingHandCursor] set]; + [super cursorUpdate:anEvent]; +} + +- (void)mouseEntered:(CPEvent)anEvent +{ + var viewB = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; + + [self addSubview:viewB]; + + [viewB addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect owner:viewB userInfo:nil]]; + + [super mouseEntered:anEvent]; +} + +@end + +@implementation CPTrackingAreaViewLiveAddition2 : CPTrackingAreaView + +- (void)cursorUpdate:(CPEvent)anEvent +{ + [[CPCursor pointingHandCursor] set]; + [super cursorUpdate:anEvent]; +} + +- (void)mouseEntered:(CPEvent)anEvent +{ + var viewB = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; + + [self addSubview:viewB]; + + [viewB addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect | CPTrackingAssumeInside owner:viewB userInfo:nil]]; + + [super mouseEntered:anEvent]; +} + @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/BundleTest/Info.plist b/Tests/Foundation/BundleTest/Info.plist new file mode 100644 index 000000000..6a2f0fe2d --- /dev/null +++ b/Tests/Foundation/BundleTest/Info.plist @@ -0,0 +1,16 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + BundleTest + CPBundleLocalizableStrings + + Localizable.strings + + CPBundleDefaultLanguage + fr + + diff --git a/Tests/Foundation/BundleTest/Resources/fr.lproj/Localizable.strings b/Tests/Foundation/BundleTest/Resources/fr.lproj/Localizable.strings new file mode 100644 index 000000000..1c16f3ac7 --- /dev/null +++ b/Tests/Foundation/BundleTest/Resources/fr.lproj/Localizable.strings @@ -0,0 +1,5 @@ +/* My first context. */ +"Label from file" = "Label traduit de fr.lproj du premier context"; + +/* My second context. */ +"Label from file" = "Label traduit de fr.lproj du second context"; \ No newline at end of file diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j index d3d1bb3b8..828b70efe 100644 --- a/Tests/Foundation/CPArrayTest.j +++ b/Tests/Foundation/CPArrayTest.j @@ -11,6 +11,16 @@ return ConcreteArray; } +- (void)test_initWithObjects_count_ +{ + var arrayClass = [[self class] arrayClass], + array = [[arrayClass alloc] initWithObjects:[@"hello", @"bye", @"goodnight", @"seeya"] count:2]; + + [self assert:[array count] equals:2]; + [self assert:[array objectAtIndex:0] equals:@"hello"]; + [self assert:[array objectAtIndex:1] equals:@"bye"]; +} + - (void)test_containsObject_ { var arrayClass = [[self class] arrayClass], @@ -695,6 +705,23 @@ [self assert:[1, [CPNull null], "3"] equals:anArray]; } +- (void)testArrayByApplyingBlock +{ + var arr = @[@"a", @"b", @"c", @"d"]; + + var mapped = [arr arrayByApplyingBlock:function(obj, idx) + { + return obj + "_" + idx; + }]; + + [self assert:[mapped count] equals:[arr count]]; + + [arr enumerateObjectsUsingBlock:function(obj, idx, stop) + { + [self assert:mapped[idx] equals:(obj + "_" + idx)]; + }]; +} + @end @implementation AlwaysEqual : CPObject @@ -763,6 +790,21 @@ return self; } +- (id)initWithObjects:(CPArray)objects count:(CPUInteger)aCount +{ + self = [super init]; + + if (self) + { + array = []; + + for (var index = 0; index < aCount; ++index) + array.push([objects objectAtIndex:index]); + } + + return self; +} + - (CPUInteger)count { return array.length; diff --git a/Tests/Foundation/CPBundleTest.j b/Tests/Foundation/CPBundleTest.j new file mode 100644 index 000000000..f301175fc --- /dev/null +++ b/Tests/Foundation/CPBundleTest.j @@ -0,0 +1,69 @@ +@import + +@implementation CPBundleTest : OJTestCase +{ + +} + ++ (void)setUp +{ + +} + ++ (void)tearDown +{ + +} + +- (void)setUp +{ + +} + +- (void)tearDown +{ + +} + +- (void)testCreationMainBundle +{ + var bundle = [CPBundle mainBundle]; +} + +- (void)testLoadingBundle +{ + var bundle = [CPBundle bundleWithPath:@"Tests/Foundation/BundleTest"]; + [bundle loadWithDelegate:self]; + + [self assert:[bundle objectForInfoDictionaryKey:"CPBundleDefaultLanguage"] equals:"fr"]; + [self assert:[bundle objectForInfoDictionaryKey:"CPBundleLocalizableStrings"] equals:["Localizable.strings"]]; +} + +- (void)testLocalization +{ + var bundle = [CPBundle bundleWithPath:@"Tests/Foundation/BundleTest"]; + [bundle loadWithDelegate:self]; + + [self assert:[bundle localizedStringForKey:"Label from file" value:"" table:"Localizable"] equals:"Label traduit de fr.lproj du premier context"]; + [self assert:[bundle localizedStringForKey:"Wrong key" value:"Default value" table:"Localizable"] equals:"Default value"]; + [self assert:[bundle localizedStringForKey:"Wrong key" value:"" table:"Localizable"] equals:"Wrong key"]; + + [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "Localizable", bundle, "My first context.") equals:"Label traduit de fr.lproj du premier context"]; + [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "", bundle, "My first context.") equals:"Label traduit de fr.lproj du premier context"]; + [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "Localizable", bundle, "") equals:"Label traduit de fr.lproj du premier context"]; + [self assert:CPCopyLocalizedStringFromTableInBundle("Wrong key", "Localizable", bundle, "") equals:"Wrong key"]; + [self assert:CPCopyLocalizedStringFromTableInBundle("Wrong key", "coucou", bundle, "") equals:"Wrong key"]; + + [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "Localizable", bundle, "My second context.") equals:"Label traduit de fr.lproj du second context"]; +} + +@end + +@implementation CPBundleTest (CPBundleTestBundleDelegate) + +- (void)bundleDidFinishLoading:(CPBundle)aBundle +{ + +} + +@end \ No newline at end of file diff --git a/Tests/Foundation/CPDateFormatterTest.j b/Tests/Foundation/CPDateFormatterTest.j index 154b7fe24..3bdcc749d 100644 --- a/Tests/Foundation/CPDateFormatterTest.j +++ b/Tests/Foundation/CPDateFormatterTest.j @@ -635,18 +635,50 @@ var result = [_dateFormatter dateFromString:@"10"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-10-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"M"]; + var result = [_dateFormatter dateFromString:@"1"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"M"]; + var result = [_dateFormatter dateFromString:@"12"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"MM"]; var result = [_dateFormatter dateFromString:@"7"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-07-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"MM"]; + var result = [_dateFormatter dateFromString:@"1"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"MM"]; + var result = [_dateFormatter dateFromString:@"12"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"MMM"]; var result = [_dateFormatter dateFromString:@"Sep"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"MMM"]; + var result = [_dateFormatter dateFromString:@"Jan"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"MMM"]; + var result = [_dateFormatter dateFromString:@"Dec"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"MMMM"]; var result = [_dateFormatter dateFromString:@"September"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"MMMM"]; + var result = [_dateFormatter dateFromString:@"December"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"MMMM"]; + var result = [_dateFormatter dateFromString:@"January"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"MMMMM"]; var result = [_dateFormatter dateFromString:@"S"]; [self assert:result equals:nil]; @@ -682,18 +714,50 @@ var result = [_dateFormatter dateFromString:@"10"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-10-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"L"]; + var result = [_dateFormatter dateFromString:@"1"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"L"]; + var result = [_dateFormatter dateFromString:@"12"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"LL"]; var result = [_dateFormatter dateFromString:@"7"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-07-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"LL"]; + var result = [_dateFormatter dateFromString:@"1"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"LL"]; + var result = [_dateFormatter dateFromString:@"12"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"LLL"]; var result = [_dateFormatter dateFromString:@"Sep"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"LLL"]; + var result = [_dateFormatter dateFromString:@"Dec"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"LLL"]; + var result = [_dateFormatter dateFromString:@"Jan"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"LLLL"]; var result = [_dateFormatter dateFromString:@"September"]; [self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"LLLL"]; + var result = [_dateFormatter dateFromString:@"December"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]]; + + [_dateFormatter setDateFormat:@"LLLL"]; + var result = [_dateFormatter dateFromString:@"January"]; + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]]; + [_dateFormatter setDateFormat:@"LLLLL"]; var result = [_dateFormatter dateFromString:@"S"]; [self assert:result equals:nil]; @@ -1140,7 +1204,13 @@ { [_dateFormatter setDateFormat:@"hh v"]; var result = [_dateFormatter dateFromString:@"02 PT"]; - [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 10:00:00 +0000"]]; + // As the CPTimeZone does not care about daylight saving time. The 'PT' time zone can result in 'PST' or 'PDT'. + // The assert below can be any of the two version depending which time zone abbreviation CPDictionary 'keyEnumerator' + // will return first. This behaviour is undefined. + if ([[CPTimeZone _timeZoneFromString:@"PT" style:CPTimeZoneNameStyleShortGeneric locale:[_dateFormatter locale]] abbreviation] === @"PDT") + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 09:00:00 +0000"]]; + else + [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 10:00:00 +0000"]]; [_dateFormatter setDateFormat:@"hh vvvv"]; var result = [_dateFormatter dateFromString:@"8 GMT-08:35"]; diff --git a/Tests/Foundation/CPDictionaryTest.j b/Tests/Foundation/CPDictionaryTest.j index 5cdd75983..2cbcd64b7 100644 --- a/Tests/Foundation/CPDictionaryTest.j +++ b/Tests/Foundation/CPDictionaryTest.j @@ -49,6 +49,15 @@ [self assert:[dict_cm count] equals:2]; } +- (void)testInitWithObjectsDuplicatedKeys +{ + var dict = [[CPDictionary alloc] initWithObjects:[@"1", @"2", @"Extra1"] forKeys:[@"key1", @"key2", @"key1"]]; + // The first value for "key1" should be inte the dictionary to be compliant with Cocoa + [self assert:[dict objectForKey:@"key1"] equals:@"1"]; + [self assert:[dict objectForKey:@"key2"] equals:@"2"]; + [self assert:[dict count] equals:2]; +} + - (void)testDictionaryWithObject { var dict = [CPDictionary dictionaryWithObject:@"1" forKey:@"key1"]; @@ -427,6 +436,17 @@ [self assert:@"Value3" equals:[dict objectForKey:@"Key3"]]; } +- (void)testInitWithObjectsAndKeysDuplicatedKeys +{ + var dict = [[CPDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value3", @"Key3", @"ExtraValue1", @"Key1"]; + + // The first value for "key1" should be inte the dictionary to be compliant with Cocoa + [self assert:2 equals:[dict count]]; + [self assert:@"Value1" equals:[dict objectForKey:@"Key1"]]; + [self assert:nil equals:[dict objectForKey:@"Key2"]]; // No key/value pair + [self assert:@"Value3" equals:[dict objectForKey:@"Key3"]]; +} + - (void)testInitWithObjectsAndKeysAndNilValueShouldThrowException { [self assertThrows:function () { diff --git a/Tests/Foundation/CPKeyValueObservingTest.j b/Tests/Foundation/CPKeyValueObservingTest.j index 9726a7f05..59b501b1c 100644 --- a/Tests/Foundation/CPKeyValueObservingTest.j +++ b/Tests/Foundation/CPKeyValueObservingTest.j @@ -28,7 +28,7 @@ var _getCheeseCounter; count = arguments.length; for (; index < count; ++index) - class_addMethod(theClass, arguments[index], function() { }); + class_addMethod(theClass, arguments[index], function() { }, ["void"]); return [theClass new]; } @@ -268,7 +268,8 @@ var _getCheeseCounter; - (void)testOnlyInsertObject_AtKeyIndex_Implemented { var insertSelector = @selector(insertObject:inObjectsAtIndex:), - object = [self objectWithMethods:insertSelector]; + object = [self objectWithMethods:insertSelector], + methodTypes = class_getInstanceMethod(object.isa, insertSelector).method_types; // Sanity check [self assert:class_getInstanceMethod(object.isa, insertSelector) @@ -417,6 +418,64 @@ var _getCheeseCounter; [self assert:test equals:_lastObject]; } +- (void)testMethodTypesOnKVOForSet_Key_Implemented +{ + var setSelector = @selector(setObjects:), + object = [self objectWithMethods:setSelector], + methodTypes = class_getInstanceMethod(object.isa, setSelector).method_types; + + // Sanity check + [self assert:class_getInstanceMethod(object.isa, setSelector) + same:class_getInstanceMethod([object class], setSelector)]; + + [object + addObserver:self + forKeyPath:@"objects" + options:CPKeyValueObservingOptionOld | CPKeyValueObservingOptionNew + context:NULL]; + + // Sanity check + [self assert:class_getInstanceMethod(object.isa, setSelector) + notSame:class_getInstanceMethod([object class], setSelector)]; + + // Check that the return and parameter types are the same on the new method as the old + [self assertTrue:methodTypes != nil message:@"methodTypes can not be nil or undefined"]; + [self assert:methodTypes equals:class_getInstanceMethod(object.isa, setSelector).method_types]; +} + +- (void)testMethodTypesOnKVOForInsertObject_AtKeyIndex_Implemented_and_removeFromKeyAtIndex +{ + var insertSelector = @selector(insertObject:inObjectsAtIndex:), + removeSelector = @selector(removeObjectFromObjectsAtIndex:), + object = [self objectWithMethods:insertSelector, removeSelector], + methodTypesInsert = class_getInstanceMethod(object.isa, insertSelector).method_types, + methodTypesRemove = class_getInstanceMethod(object.isa, removeSelector).method_types; + + // Sanity check + [self assert:class_getInstanceMethod(object.isa, insertSelector) + same:class_getInstanceMethod([object class], insertSelector)]; + [self assert:class_getInstanceMethod(object.isa, removeSelector) + same:class_getInstanceMethod([object class], removeSelector)]; + + [object + addObserver:self + forKeyPath:@"objects" + options:CPKeyValueObservingOptionOld | CPKeyValueObservingOptionNew + context:NULL]; + + // Sanity check + [self assert:class_getInstanceMethod(object.isa, insertSelector) + notSame:class_getInstanceMethod([object class], insertSelector)]; + [self assert:class_getInstanceMethod(object.isa, removeSelector) + notSame:class_getInstanceMethod([object class], removeSelector)]; + + // Check that the return and parameter types are the same on the new method as the old + [self assertTrue:methodTypesInsert != nil message:@"methodTypes can not be nil or undefined on insert selector"]; + [self assertTrue:methodTypesRemove != nil message:@"methodTypes can not be nil or undefined in remove selector"]; + [self assert:methodTypesInsert equals:class_getInstanceMethod(object.isa, insertSelector).method_types]; + [self assert:methodTypesRemove equals:class_getInstanceMethod(object.isa, removeSelector).method_types]; +} + @end @implementation ObservingTester : CPObject diff --git a/Tests/Foundation/CPMutableArrayTest.j b/Tests/Foundation/CPMutableArrayTest.j index cdc75b7b4..03d8129b3 100644 --- a/Tests/Foundation/CPMutableArrayTest.j +++ b/Tests/Foundation/CPMutableArrayTest.j @@ -555,6 +555,21 @@ return self; } +- (id)initWithObjects:(CPArray)objects count:(CPUInteger)aCount +{ + self = [super init]; + + if (self) + { + array = []; + + for (var index = 0; index < aCount; ++index) + array.push([objects objectAtIndex:index]); + } + + return self; +} + - (CPUInteger)count { return array.length; diff --git a/Tests/Foundation/CPNotificationCenterTest.j b/Tests/Foundation/CPNotificationCenterTest.j index 47aab1e0f..9695ac810 100644 --- a/Tests/Foundation/CPNotificationCenterTest.j +++ b/Tests/Foundation/CPNotificationCenterTest.j @@ -97,6 +97,57 @@ var TestNotification = @"TestNotification"; [self assert:7 equals:notificationCount message:@"observer should not be notified"]; } +- (void)testNotifyWithBlocksAndOperationQueue +{ + var center = [CPNotificationCenter defaultCenter], + queue = [[CPOperationQueue alloc] init]; + + notificationCount = 0; + + var notificationBlock = function(notification){ + notificationCount += 1; + }; + + var observer2 = [center addObserverForName:TestNotification object:2 queue:queue usingBlock:notificationBlock], + observer25 = [center addObserverForName:TestNotification object:25 queue:queue usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:self]; + [center postNotificationName:TestNotification object:2]; + + [queue waitUntilAllOperationsAreFinished]; + [self assert:1 equals:notificationCount message:@"observer should be notified for object '2'"]; + + var observerNil = [center addObserverForName:TestNotification object:nil queue:queue usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [queue waitUntilAllOperationsAreFinished]; + [self assert:3 equals:notificationCount message:@"observer should be notified for object '2' and for any object"]; + + [center removeObserver:observer2 name:TestNotification object:2]; + [center postNotificationName:TestNotification object:2]; + [queue waitUntilAllOperationsAreFinished]; + [self assert:4 equals:notificationCount message:@"observer should be notified only for any object"]; + + // At this point we have TestNofication:nil observer and a TestNotification:25 observer. + observer2 = [center addObserverForName:nil object:2 queue:queue usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [queue waitUntilAllOperationsAreFinished]; + [self assert:6 equals:notificationCount message:@"observer should be notified for TestNofication and for object '2' (TestNotification)"]; + [center postNotificationName:@"RandomNotification" object:2]; + [queue waitUntilAllOperationsAreFinished]; + [self assert:7 equals:notificationCount message:@"observer should be notified for object '2' (RandomNotification)"]; + + [center removeObserver:observer2]; + [center removeObserver:observer25]; + [center removeObserver:observerNil]; + [center postNotificationName:TestNotification object:nil]; + [center postNotificationName:TestNotification object:2]; + [center postNotificationName:TestNotification object:25]; + [queue waitUntilAllOperationsAreFinished]; + [self assert:7 equals:notificationCount message:@"observer should not be notified"]; +} + - (void)testAddObserversDuringNotification { var center = [CPNotificationCenter defaultCenter]; diff --git a/Tests/Foundation/CPNotificationQueueTest.j b/Tests/Foundation/CPNotificationQueueTest.j new file mode 100644 index 000000000..9992ccd95 --- /dev/null +++ b/Tests/Foundation/CPNotificationQueueTest.j @@ -0,0 +1,124 @@ +@import + +var TestNotification = @"TestNotification"; + +@implementation CPNotificationQueueTest : OJTestCase +{ + int notificationCount; +} + +- (void)setUp +{ + notificationCount = 0; +} + +/*! + Test ceation +*/ +- (void)testCreate +{ + var queue = [CPNotificationQueue defaultQueue]; + [self assert:queue._notificationCenter equals:[CPNotificationCenter defaultCenter]]; + + var notificationCenter = [CPNotificationCenter new], + secondQueue = [[CPNotificationQueue alloc] initWithNotificationCenter:notificationCenter]; + [self assert:secondQueue._notificationCenter equals:notificationCenter]; +} + +- (void)testNotificationPostNow +{ + var queue = [CPNotificationQueue defaultQueue], + notification = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:nil]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotification:) name:@"TestNotification" object:self]; + [queue enqueueNotification:notification postingStyle:CPPostNow]; + [self assert:notificationCount equals:1]; + + [queue enqueueNotification:notification postingStyle:CPPostNow]; + [self assert:notificationCount equals:2]; + + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [queue enqueueNotification:notification postingStyle:CPPostWhenIdle]; + [queue enqueueNotification:notification postingStyle:CPPostNow]; + [self assert:notificationCount equals:3]; + + [queue enqueueNotification:notification postingStyle:CPPostNow]; + [queue enqueueNotification:notification postingStyle:CPPostNow]; + [self assert:notificationCount equals:5]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:5]; +} + +- (void)testNotificationPostASAP +{ + var queue = [CPNotificationQueue defaultQueue], + notification = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:nil], + notification2 = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:@{}]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotification:) name:@"TestNotification" object:self]; + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [self assert:notificationCount equals:0]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:1]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:1]; + + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:2]; + + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:4]; + + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil]; + [queue dequeueNotificationsMatching:notification2 coalesceMask:CPNotificationNoCoalescing]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:5]; + + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil]; + [queue dequeueNotificationsMatching:notification coalesceMask:CPNotificationCoalescingOnName]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:5]; + + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil]; + [queue dequeueNotificationsMatching:notification coalesceMask:CPNotificationCoalescingOnSender]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:5]; +} + +- (void)testNotificationWhenIdle +{ + var queue = [CPNotificationQueue defaultQueue], + notification = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:nil], + notification2 = [[CPNotification alloc] initWithName:@"TestNotificationIdle" object:self userInfo:@{}]; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotification:) name:@"TestNotification" object:self]; + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotificationIdle:) name:@"TestNotificationIdle" object:self]; + + [queue enqueueNotification:notification postingStyle:CPPostASAP]; + [queue enqueueNotification:notification2 postingStyle:CPPostWhenIdle]; + [self assert:notificationCount equals:0]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:1]; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + [self assert:notificationCount equals:2]; +} + +- (void)countNotification:(CPNotification)aNotification +{ + notificationCount++; +} + +- (void)countNotificationIdle:(CPNotification)aNotification +{ + notificationCount++; +} + +@end \ No newline at end of file diff --git a/Tests/Foundation/CPPredicateTest.j b/Tests/Foundation/CPPredicateTest.j index 114f440e9..3a9840e96 100644 --- a/Tests/Foundation/CPPredicateTest.j +++ b/Tests/Foundation/CPPredicateTest.j @@ -79,6 +79,17 @@ var expression_minusset = [CPExpression expressionForMinusSet:set with:array]; [self assertNotNull:expression_minusset message:"MinusSet Expression should not be nil"]; + + var expression_block = [CPExpression expressionForBlock:function(obj, args, bindings) + { + return obj; + } arguments:nil]; + + [self assertNotNull:expression_block message:"Block Expression should not be nil"]; + + var expression_conditional = [CPExpression expressionForConditional:[CPPredicate predicateWithValue:YES] trueExpression:expression_minusset falseExpression:expression_block]; + + [self assertNotNull:expression_conditional message:"Conditional Expression should not be nil"]; } - (void)testSetExpressionEvaluation @@ -139,14 +150,35 @@ { var collection = [CPExpression expressionForKeyPath:@"Record1.Children"], iteratorVariable = @"x", - predicate = [CPPredicate predicateWithFormat:@"$x BEGINSWITH 'Kid'"]; + predicate = [CPPredicate predicateWithFormat:@"$x BEGINSWITH $KidVariable"]; var expression = [CPExpression expressionForSubquery:collection usingIteratorVariable:iteratorVariable predicate:predicate], - eval = [expression expressionValueWithObject:dict context:nil], + eval = [expression expressionValueWithObject:dict context:@{"KidVariable":[CPExpression expressionForConstantValue:"Kid"]}], expected = [CPArray arrayWithObjects:"Kid1", "Kid2"]; [self assertTrue:([eval isEqual:expected]) message:"'" + [expression predicateFormat] + "' result is "+ eval + "but should be " + expected]; } +- (void)testBlockExpressionEvaluation +{ + var block = function(obj, args, bindings) + { + return [obj stringByAppendingString:[args componentsJoinedByString:"-"]]; + }; + + var expression = [CPExpression expressionForBlock:block arguments:[[CPExpression expressionForConstantValue:"A"], [CPExpression expressionForConstantValue:"B"]]]; + + var eval = [expression expressionValueWithObject:"OBJ" context:@{}]; + [self assertTrue:([eval isEqual:"OBJA-B"]) message:"'" + [expression description] + "' result is "+ eval + "but should be " + "OBJA-B"]; +} + +- (void)testConditionalExpressionEvaluation +{ + var expression = [CPExpression expressionForConditional:[CPPredicate predicateWithFormat:"SELF = $variable"] trueExpression:[CPExpression expressionForConstantValue:"TRUE_EXP"] falseExpression:[CPExpression expressionForConstantValue:"FALSE_EXP"]]; + + var eval = [expression expressionValueWithObject:"OBJ" context:@{"variable":"OBJ"}]; + [self assertTrue:([eval isEqual:"TRUE_EXP"]) message:"'" + [expression description] + "' result is "+ eval + "but should be " + "TRUE_EXP"]; +} + - (void)testOptions { var pred = [[CPComparisonPredicate alloc] initWithLeftExpression:[CPExpression expressionForConstantValue:@"àa"] rightExpression:[CPExpression expressionForConstantValue:@"aà"] modifier:CPDirectPredicateModifier type:CPLikePredicateOperatorType options:3]; @@ -369,8 +401,8 @@ [self assertTrue:[predicate evaluateWithObject:nil] message:"Predicate " + predicate + " should be TRUE"]; // TEST Subquery -- This means: search people who have 2 boys. - predicate = [CPPredicate predicateWithFormat: @"SUBQUERY(Record1.Children, $x, $x BEGINSWITH 'Kid')[SIZE] = 2"]; - [self assertTrue:[predicate evaluateWithObject:dict] message:"Predicate " + predicate + " should evaluate to TRUE"]; + predicate = [CPPredicate predicateWithFormat: @"SUBQUERY(Record1.Children, $x, $x BEGINSWITH $Begining)[SIZE] = 2"]; + [self assertTrue:[predicate evaluateWithObject:dict substitutionVariables:@{"Begining":"Kid"}] message:"Predicate " + predicate + " should evaluate to TRUE"]; // Test Set expressions // Parsing is ok but the evaluation of this predicate will return NO because: @@ -381,6 +413,9 @@ predicate = [CPPredicate predicateWithFormat:@"a UNION {'b'} = {'a','b'}"]; var left = [[predicate leftExpression] expressionValueWithObject:object context:nil]; [self assertTrue:[left isEqualToSet:result] message:"Expression eval " + left + " should be " + result]; + + predicate = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[SIZE] = 1, 'Single', Record1.Name) = 'John'"]; + [self assertTrue:[predicate evaluateWithObject:dict] message:"Predicate " + predicate + " should evaluate to TRUE"]; } - (void)testExpressionAndPredicateIsEqual @@ -439,6 +474,10 @@ pred1 = [CPPredicate predicateWithFormat:@"a = 'a' AND b = 'b'"]; pred2 = [CPPredicate predicateWithFormat:@"a = 'a' AND b = 'b'"]; [self assert:pred1 equals:pred2]; + + pred1 = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[FIRST] BEGINSWITH Record1.Name, 'SAME', 'DIFFERENT') = 'DIFFERENT'"]; + pred2 = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[FIRST] BEGINSWITH Record1.Name, 'SAME', 'DIFFERENT') = 'DIFFERENT'"]; + [self assert:pred1 equals:pred2]; } - (void)testExpressionAndPredicateIsNotEqualToNil @@ -490,6 +529,10 @@ [self assert:pred1 notEqual:nil]; + pred1 = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[FIRST] BEGINSWITH Record1.Name, 'SAME', 'DIFFERENT') = 'DIFFERENT'"]; + + [self assert:pred1 notEqual:nil]; + pred1 = [CPPredicate predicateWithFormat:@"$x CONTAINS 'a'"]; [self assert:pred1 notEqual:nil]; @@ -526,6 +569,68 @@ [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"]; + } +} + +- (void)testPredicateFormatWithNullGeneratesCorrectString +{ + var predicate1 = [CPPredicate predicateWithFormat:@"value == %@", [CPNull null]], + predicate2 = [CPPredicate predicateWithFormat:@"value == null"], + predicate3 = [CPPredicate predicateWithFormat:@"value == nil"]; + + [self assert:[predicate1 predicateFormat] equals:@"value == nil"]; + [self assert:[predicate2 predicateFormat] equals:@"value == nil"]; + [self assert:[predicate3 predicateFormat] equals:@"value == nil"]; +} + @end @implementation CPObject (PredicateTesting) diff --git a/Tests/Foundation/CPRunLoopTest.j b/Tests/Foundation/CPRunLoopTest.j index 321795e52..50cfcd3f5 100644 --- a/Tests/Foundation/CPRunLoopTest.j +++ b/Tests/Foundation/CPRunLoopTest.j @@ -34,6 +34,18 @@ [self assert:[10] equals:performer2.callArgs]; } +- (void)testPerformBlock +{ + var i = 0; + + [[CPRunLoop mainRunLoop] performBlock:function() + {i++} argument:nil order:0 modes:[CPDefaultRunLoopMode]]; + + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; + + [self assert:i equals:1]; +} + @end @implementation Performer : CPObject diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j index f3e4c9454..326c781db 100644 --- a/Tests/Foundation/CPStringTest.j +++ b/Tests/Foundation/CPStringTest.j @@ -579,4 +579,17 @@ [self assert:[@"Å Ã Ê í ö û" stripDiacritics] equals:@"A A E i o u"]; } +- (void)testStringByReplacingCharactersInRange +{ + var testString = @"testString"; + + [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(0, 0) withString:@"NewCharacters"] equals:@"NewCharacterstestString"]; + [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(0, 10) withString:@"NewCharacters"] equals:@"NewCharacters"]; + [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(0, 1) withString:@"NewCharacters"] equals:@"NewCharactersestString"]; + [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(1, 0) withString:@"NewCharacters"] equals:@"tNewCharactersestString"]; + [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(5, 0) withString:@"NewCharacters"] equals:@"testSNewCharacterstring"]; + [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(5, 5) withString:@"NewCharacters"] equals:@"testSNewCharacters"]; + [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(9, 0) withString:@"NewCharacters"] equals:@"testStrinNewCharactersg"]; +} + @end diff --git a/Tests/Foundation/CPTimeZoneTest.j b/Tests/Foundation/CPTimeZoneTest.j index f23210fc1..50dc8a2a2 100644 --- a/Tests/Foundation/CPTimeZoneTest.j +++ b/Tests/Foundation/CPTimeZoneTest.j @@ -65,10 +65,19 @@ - (void)testTimeZoneWithName { var timeZone = [CPTimeZone timeZoneWithName:@"America/Los_Angeles"]; - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + + // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary + if ([timeZone abbreviation] === @"PDT") { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PDT"]; + [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + } else { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PST"]; + [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; + } [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; @@ -99,11 +108,20 @@ - (void)testTimeZoneWithNameWithData { var timeZone = [CPTimeZone timeZoneWithName:@"America/Los_Angeles" data:_data]; - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + + // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary + if ([timeZone abbreviation] === @"PDT") { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PDT"]; + [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + } else { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PST"]; + [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; + } [self assert:[timeZone data] equals:_data]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; @@ -155,10 +173,19 @@ - (void)testInitTimeZoneWithName { var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"]; - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + + // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary + if ([timeZone abbreviation] === @"PDT") { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PDT"]; + [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + } else { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PST"]; + [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; + } [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; @@ -189,11 +216,20 @@ - (void)testInitTimeZoneWithNameWithData { var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles" data:_data]; - [self assert:[timeZone name] equals:@"America/Los_Angeles"]; - [self assert:[timeZone abbreviation] equals:@"PDT"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + + // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary + if ([timeZone abbreviation] === @"PDT") { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PDT"]; + [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + } else { + [self assert:[timeZone name] equals:@"America/Los_Angeles"]; + [self assert:[timeZone abbreviation] equals:@"PST"]; + [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; + [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; + } [self assert:[timeZone data] equals:_data]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"]; [self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"]; @@ -258,14 +294,24 @@ { var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"]; - [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary + if ([timeZone abbreviation] === @"PDT") { + [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)]; + } else { + [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)]; + } } - (void)testDescription { var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"]; - [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary + if ([timeZone abbreviation] === @"PDT") { + [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"]; + } else { + [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"]; + } } - (void)testLocalizedName diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j b/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j index 1ddd8d6f6..69e2158fc 100644 --- a/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j +++ b/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j @@ -29,7 +29,7 @@ [arrayController setContent:items]; var label = [CPTextField labelWithTitle:@"Press buttons to see [Remove First By Object] fails while [Remove First By Index] succeeds"]; - [label setFrameOrigin:CGPointMake(20, 20)]; + [label setFrameOrigin:CGPointMake(20, 20)]; [contentView addSubview:label]; var field = [CPTextField textFieldWithStringValue:@"" placeholder:@"" width:100]; @@ -65,7 +65,8 @@ - (void)removeFirstByIndex:(id)sender { - [arrayController removeObjectAtArrangedObjectIndex:0]; + if ([[arrayController contentArray] count]) + [arrayController removeObjectAtArrangedObjectIndex:0]; } - (void)observeValueForKeyPath:(CPString)keyPath ofObject:(id)object change:(CPDictionary)change context:(id)context diff --git a/Tests/Manual/CPByteCountFormatter/Resources/MainMenu.cib b/Tests/Manual/CPByteCountFormatter/Resources/MainMenu.cib index c937a376d..e30f70aa2 100644 --- a/Tests/Manual/CPByteCountFormatter/Resources/MainMenu.cib +++ b/Tests/Manual/CPByteCountFormatter/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;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;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;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;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;98E;D;K;6;CP$UIDd;3;100E;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;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;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;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;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;146E;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;159E;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;166E;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;170E;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;181E;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;185E;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;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;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;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;259E;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;3;100E;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;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;100E;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;3;109E;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;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;100E;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;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;100E;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;180E;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;3;180E;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;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;200E;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;3;201E;D;K;6;CP$UIDd;3;201E;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;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;229E;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;260E;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;261E;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;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;231E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;229E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;233E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;223E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;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;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;267E;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;268E;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;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;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;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;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;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;98E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;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;282E;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;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;286E;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;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;289E;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;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;296E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;297E;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;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;175E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;176E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;215E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;216E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;217E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;219E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;220E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;221E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;208E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;210E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;205E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;319E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;206E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;321E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;322E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;324E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;325E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;235E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;236E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;246E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;244E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;245E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;237E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;247E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;329E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;330E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;331E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;332E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;334E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;237E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;337E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;245E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;339E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;340E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;341E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;244E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;342E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;246E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;345E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;346E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;236E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;348E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;349E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;350E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;235E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;351E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;352E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;260E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;354E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;355E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;356E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;357E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;360E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;361E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;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;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;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;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;109E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;369E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;370E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;371E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;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;109E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;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;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;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;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;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;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;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;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;379E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;380E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;381E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;382E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;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;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;385E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;386E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;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;123E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;388E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;389E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;126E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;389E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;391E;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;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;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;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;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;397E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;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;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;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;401E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;402E;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;403E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;405E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;406E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;407E;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;408E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;409E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;410E;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;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;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;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;414E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;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;416E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;417E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;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;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;420E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;421E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;144E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;421E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;422E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;423E;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;144E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;424E;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;144E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;425E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;426E;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;144E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;427E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;428E;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;144E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;429E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;150E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;429E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;430E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;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;150E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;432E;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;150E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;433E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;434E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;435E;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;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;420E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;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;416E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;417E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;437E;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;408E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;409E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;159E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;438E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;440E;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;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;441E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;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;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;443E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;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;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;445E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;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;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;447E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;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;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;449E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;450E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;166E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;450E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;451E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;452E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;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;166E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;454E;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;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;455E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;456E;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;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;457E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;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;159E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;174E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;459E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;460E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;461E;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;174E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;462E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;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;174E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;464E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;465E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;180E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;466E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;467E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;468E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;469E;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;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;462E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;470E;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;416E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;471E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;472E;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;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;473E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;474E;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;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;475E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;476E;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;408E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;477E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;478E;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;479E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;480E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;481E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;481E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;482E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;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;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;484E;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;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;485E;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;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;486E;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;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;487E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;196E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;487E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;488E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;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;196E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;484E;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;196E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;489E;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;196E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;201E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;490E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;491E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;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;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;492E;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;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;493E;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;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;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;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;495E;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;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;496E;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;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;497E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;498E;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;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;401E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;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;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;500E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;213E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;500E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;501E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;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;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;503E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;504E;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;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;505E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;506E;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;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;507E;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;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;508E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;509E;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;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;510E;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;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;401E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;511E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;512E;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;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;511E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;513E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;514E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;515E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;516E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;517E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;518E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;519E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;225E;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;224E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;521E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;522E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;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;3;226E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;225E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;526E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;225E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;527E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;528E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;520E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;419E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;529E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;520E;K;14;CPBoxTitleViewD;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;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;531E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;532E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;527E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;264E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;3;259E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;364E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;538E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;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;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;542E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;364E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;538E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;543E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;544E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;545E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;363E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;362E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;362E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;362E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;546E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;547E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;548E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;549E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;364E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;538E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;226E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;225E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;552E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;225E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;527E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;528E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;520E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;419E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;553E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;416E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;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;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;555E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;556E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;559E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;560E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;561E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;562E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;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;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;565E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;238E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;257E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;566E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;567E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;568E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;569E;K;6;$afontD;K;6;CP$UIDd;3;570E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;479E;K;11;$aalignmentD;K;6;CP$UIDd;3;520E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;571E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;520E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;572E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;574E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;575E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;576E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;577E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;578E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;579E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;580E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;581E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;582E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;585E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;238E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;256E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;586E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;587E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;568E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;588E;K;6;$afontD;K;6;CP$UIDd;3;570E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;479E;K;11;$aalignmentD;K;6;CP$UIDd;3;520E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;571E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;520E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;589E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;3;362E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;590E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;591E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;592E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;593E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;594E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;595E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;596E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;597E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;598E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;597E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;599E;E;D;K;10;$classnameS;20;CPByteCountFormatterK;8;$classesA;S;20;CPByteCountFormatterS;11;CPFormatterS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;258E;K;33;CPByteCountFormatterCountStyleKeyD;K;6;CP$UIDd;3;520E;K;49;CPByteCountFormatterAllowsNonnumericFormattingKeyD;K;6;CP$UIDd;3;362E;K;46;CPByteCountFormatterIncludesActualByteCountKeyD;K;6;CP$UIDd;3;364E;K;36;CPByteCountFormatterIncludesCountKeyD;K;6;CP$UIDd;3;362E;K;35;CPByteCountFormatterIncludesUnitKeyD;K;6;CP$UIDd;3;362E;K;31;CPByteCountFormatterAdaptiveKeyD;K;6;CP$UIDd;3;362E;K;45;CPByteCountFormatterZeroPadsFractionDigitsKeyD;K;6;CP$UIDd;3;364E;K;35;CPByteCountFormatterAllowedUnitsKeyD;K;6;CP$UIDd;3;520E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;223E;E;E;S;8;delegateS;9;byteCountS;18;formattedByteCountS;10;propertiesS;10;testWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications: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;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;16;propertyChanged:S;13;unitsChanged:S;59;selectedIndex: self.formattedByteCount.formatter.countStyleS;13;selectedIndexS;44;self.formattedByteCount.formatter.countStyleD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;63;value: self.formattedByteCount.formatter.zeroPadsFractionDigitsS;5;valueS;56;self.formattedByteCount.formatter.zeroPadsFractionDigitsD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;53;value: self.formattedByteCount.formatter.includesUnitS;46;self.formattedByteCount.formatter.includesUnitD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;54;value: self.formattedByteCount.formatter.includesCountS;47;self.formattedByteCount.formatter.includesCountD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;64;value: self.formattedByteCount.formatter.includesActualByteCountS;57;self.formattedByteCount.formatter.includesActualByteCountD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;67;value: self.formattedByteCount.formatter.allowsNonnumericFormattingS;60;self.formattedByteCount.formatter.allowsNonnumericFormattingD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;49;value: self.formattedByteCount.formatter.adaptiveS;42;self.formattedByteCount.formatter.adaptiveD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;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;158E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;122E;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;3;107E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;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;3;110E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;113E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;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;3;129E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;132E;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;136E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;149E;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;3;142E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;139E;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;147E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;148E;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;152E;D;K;6;CP$UIDd;3;151E;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;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;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;164E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;162E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;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;167E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;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;175E;D;K;6;CP$UIDd;3;176E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;212E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;181E;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;185E;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;195E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;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;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;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;D;K;6;CP$UIDd;3;199E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;23;{{42, 107}, {537, 306}}S;21;{{0, 0}, {1440, 878}}d;2;15S;29;CPByteCountFormatter Workshopd;1;0S;20;{{0, 0}, {537, 306}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;233E;E;E;S;6;normalS;21;{{21, 20}, {495, 95}}S;19;{{0, 0}, {495, 95}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;530E;E;E;d;2;34S;3;boxS;3;BoxD;K;6;$classD;K;6;CP$UIDd;3;224E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;227E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;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;3;227E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;607E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;E;S;21;{{95, 62}, {388, 17}}S;19;{{0, 0}, {388, 17}}S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;534E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;600E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;601E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;364E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;364E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;362E;E;d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;537E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;602E;E;S;20;{{18, 62}, {67, 17}}S;18;{{0, 0}, {67, 17}}d;2;36S;10;Formatted:S;21;{{91, 20}, {171, 29}}S;19;{{0, 0}, {171, 29}}S;28;bezeled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;537E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;603E;E;S;20;{{18, 27}, {69, 17}}S;18;{{0, 0}, {69, 17}}S;11;Byte count:S;27;{{21, 125.5}, {495, 160.5}}S;22;{{0, 0}, {495, 160.5}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;554E;E;E;S;10;PropertiesD;K;6;$classD;K;6;CP$UIDd;3;224E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;609E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;610E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;611E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;607E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;E;S;20;{{16, 13}, {77, 21}}S;18;{{0, 0}, {77, 21}}S;9;check-boxS;8;selectedS;8;AdaptiveS;21;{{16, 41}, {222, 21}}S;19;{{0, 0}, {222, 21}}S;29;Allows non-numeric formattingS;21;{{16, 68}, {177, 21}}S;19;{{0, 0}, {177, 21}}S;25;Zero pads fraction digitsS;22;{{17, 102}, {194, 25}}S;19;{{0, 0}, {194, 25}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;534E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;600E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;601E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;362E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;364E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;362E;E;d;2;12S;13;Binary FormatS;17;_popUpItemAction:S;14;Decimal FormatS;20;System Memory FormatS;18;System File FormatS;22;{{279, 41}, {114, 21}}S;19;{{0, 0}, {114, 21}}S;14;Includes countS;22;{{279, 68}, {104, 21}}S;19;{{0, 0}, {104, 21}}S;13;Includes unitS;22;{{279, 14}, {187, 21}}S;19;{{0, 0}, {187, 21}}S;26;Includes actual byte countS;23;{{279, 102}, {195, 25}}S;19;{{0, 0}, {195, 25}}S;19;bordered+pulls-downS;5;UnitsS;7;DefaultS;3;AllS;5;BytesS;2;MBS;2;GBS;2;KBS;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;240E;E;E;S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;608E;D;K;6;CP$UIDd;3;608E;D;K;6;CP$UIDd;3;608E;D;K;6;CP$UIDd;3;419E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;419E;E;E;S;20;{{1, -5}, {501, 99}}S;19;{{0, 0}, {501, 99}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;229E;E;E;d;2;18f;18;0.6862745098039216S;22;{{1, 9.5}, {501, 150}}S;20;{{0, 0}, {501, 150}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;247E;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;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;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;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;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;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;3;101E;D;K;6;CP$UIDd;3;103E;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;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;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;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;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;146E;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;159E;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;166E;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;170E;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;181E;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;185E;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;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;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;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;262E;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;3;103E;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;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;103E;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;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;121E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;198E;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;183E;D;K;6;CP$UIDd;3;203E;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;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;232E;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;263E;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;264E;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;230E;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;230E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;265E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;236E;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;236E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;267E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;268E;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;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;234E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;232E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;236E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;226E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;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;23E;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;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;172E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;170E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;101E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;3;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;178E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;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;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;217E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;218E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;219E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;220E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;222E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;223E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;319E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;213E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;321E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;322E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;205E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;206E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;324E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;207E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;325E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;208E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;209E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;329E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;196E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;333E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;334E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;238E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;249E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;247E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;248E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;242E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;250E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;336E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;242E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;337E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;338E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;339E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;341E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;342E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;344E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;345E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;248E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;346E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;347E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;348E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;247E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;349E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;350E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;351E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;249E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;352E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;353E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;354E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;355E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;356E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;357E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;238E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;358E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;359E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;360E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;263E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;361E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;362E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;363E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;364E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;106E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;364E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;367E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;368E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;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;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;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;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;376E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;377E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;379E;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;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;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;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;382E;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;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;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;384E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;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;386E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;122E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;387E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;388E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;389E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;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;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;126E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;126E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;392E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;393E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;129E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;396E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;397E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;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;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;400E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;401E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;402E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;404E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;407E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;410E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;140E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;140E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;412E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;413E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;414E;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;415E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;416E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;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;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;418E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;419E;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;420E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;421E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;422E;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;423E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;424E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;425E;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;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;427E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;428E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;147E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;147E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;428E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;429E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;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;147E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;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;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;432E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;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;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;434E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;435E;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;147E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;436E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;437E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;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;153E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;439E;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;153E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;440E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;157E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;157E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;440E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;441E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;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;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;157E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;427E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;443E;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;423E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;157E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;424E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;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;415E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;157E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;416E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;445E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;162E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;445E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;446E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;447E;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;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;448E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;449E;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;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;450E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;451E;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;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;452E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;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;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;454E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;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;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;456E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;457E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;169E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;169E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;457E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;458E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;459E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;460E;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;169E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;461E;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;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;462E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;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;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;464E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;465E;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;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;177E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;177E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;466E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;467E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;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;177E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;469E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;470E;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;177E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;471E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;181E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;471E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;472E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;473E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;183E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;473E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;474E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;475E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;476E;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;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;469E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;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;423E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;478E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;479E;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;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;480E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;481E;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;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;482E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;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;415E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;484E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;485E;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;486E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;487E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;488E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;488E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;489E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;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;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;491E;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;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;492E;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;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;493E;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;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;199E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;494E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;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;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;491E;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;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;496E;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;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;497E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;204E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;497E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;498E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;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;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;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;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;500E;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;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;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;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;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;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;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;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;504E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;505E;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;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;506E;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;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;507E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;216E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;507E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;508E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;509E;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;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;510E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;511E;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;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;512E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;513E;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;216E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;514E;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;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;515E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;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;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;516E;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;216E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;517E;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;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;518E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;519E;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;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;518E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;520E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;521E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;522E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;523E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;524E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;525E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;526E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;228E;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;227E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;528E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;532E;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;3;229E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;228E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;533E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;534E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;228E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;536E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;527E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;537E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;538E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;527E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;426E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;539E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;527E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;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;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;541E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;542E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;547E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;271E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;3;262E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;371E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;550E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;551E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;552E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;554E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;371E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;550E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;556E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;557E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;559E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;370E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;369E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;369E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;369E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;560E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;561E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;562E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;563E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;564E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;371E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;550E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;229E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;228E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;565E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;566E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;567E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;228E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;536E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;527E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;537E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;568E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;527E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;426E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;569E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;423E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;K;6;CP$UIDd;1;0E;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;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;571E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;572E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;575E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;576E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;577E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;578E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;579E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;581E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;582E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;583E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;584E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;241E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;259E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;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;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;588E;K;6;$afontD;K;6;CP$UIDd;3;589E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;486E;K;11;$aalignmentD;K;6;CP$UIDd;3;527E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;590E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;527E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;591E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;527E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;592E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;594E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;595E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;596E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;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;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;599E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;600E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;601E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;602E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;603E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;604E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;605E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;606E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;607E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;527E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;608E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;241E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;260E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;609E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;610E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;611E;K;6;$afontD;K;6;CP$UIDd;3;589E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;486E;K;11;$aalignmentD;K;6;CP$UIDd;3;527E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;612E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;613E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;591E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;527E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;613E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;3;369E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;615E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;616E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;617E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;618E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;620E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;621E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;622E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;621E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;623E;E;D;K;10;$classnameS;20;CPByteCountFormatterK;8;$classesA;S;20;CPByteCountFormatterS;11;CPFormatterS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;33;CPByteCountFormatterCountStyleKeyD;K;6;CP$UIDd;3;527E;K;49;CPByteCountFormatterAllowsNonnumericFormattingKeyD;K;6;CP$UIDd;3;369E;K;46;CPByteCountFormatterIncludesActualByteCountKeyD;K;6;CP$UIDd;3;371E;K;36;CPByteCountFormatterIncludesCountKeyD;K;6;CP$UIDd;3;369E;K;35;CPByteCountFormatterIncludesUnitKeyD;K;6;CP$UIDd;3;369E;K;31;CPByteCountFormatterAdaptiveKeyD;K;6;CP$UIDd;3;369E;K;45;CPByteCountFormatterZeroPadsFractionDigitsKeyD;K;6;CP$UIDd;3;371E;K;35;CPByteCountFormatterAllowedUnitsKeyD;K;6;CP$UIDd;3;527E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;226E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;624E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;371E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;624E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;371E;E;E;S;8;delegateS;9;byteCountS;18;formattedByteCountS;10;propertiesS;10;testWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications: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;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;16;propertyChanged:S;13;unitsChanged:S;59;selectedIndex: self.formattedByteCount.formatter.countStyleS;13;selectedIndexS;44;self.formattedByteCount.formatter.countStyleD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;63;value: self.formattedByteCount.formatter.zeroPadsFractionDigitsS;5;valueS;56;self.formattedByteCount.formatter.zeroPadsFractionDigitsD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;53;value: self.formattedByteCount.formatter.includesUnitS;46;self.formattedByteCount.formatter.includesUnitD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;54;value: self.formattedByteCount.formatter.includesCountS;47;self.formattedByteCount.formatter.includesCountD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;64;value: self.formattedByteCount.formatter.includesActualByteCountS;57;self.formattedByteCount.formatter.includesActualByteCountD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;67;value: self.formattedByteCount.formatter.allowsNonnumericFormattingS;60;self.formattedByteCount.formatter.allowsNonnumericFormattingD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;49;value: self.formattedByteCount.formatter.adaptiveS;42;self.formattedByteCount.formatter.adaptiveD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;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;161E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;125E;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;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;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;3;113E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;116E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;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;3;132E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;152E;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;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;142E;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;150E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;151E;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;155E;D;K;6;CP$UIDd;3;154E;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;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;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;167E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;165E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;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;170E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;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;178E;D;K;6;CP$UIDd;3;179E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;215E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;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;198E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;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;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;23;{{42, 107}, {537, 306}}S;21;{{0, 0}, {1440, 878}}d;2;15S;29;CPByteCountFormatter Workshopd;1;0S;20;{{0, 0}, {537, 306}}D;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;236E;E;E;S;6;normalS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{21, 20}, {495, 95}}S;19;{{0, 0}, {495, 95}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;540E;E;E;d;2;34S;3;boxD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;3;BoxD;K;6;$classD;K;6;CP$UIDd;3;227E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;230E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;629E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;630E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;631E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;230E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;632E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;633E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;634E;E;S;21;{{94, 62}, {390, 17}}S;19;{{0, 0}, {390, 17}}S;9;textfieldS;18;controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;545E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;625E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;548E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;371E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;371E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;-1D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;549E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;626E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;627E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;E;S;20;{{17, 62}, {69, 17}}S;18;{{0, 0}, {69, 17}}d;2;36D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;Formatted:S;21;{{91, 21}, {171, 22}}S;19;{{0, 0}, {171, 22}}S;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;549E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;628E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;627E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;E;S;20;{{17, 27}, {71, 17}}S;18;{{0, 0}, {71, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Byte count:S;27;{{21, 125.5}, {495, 160.5}}S;22;{{0, 0}, {495, 160.5}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;570E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;PropertiesD;K;6;$classD;K;6;CP$UIDd;3;227E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;236E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;636E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;637E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;638E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;236E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;632E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;633E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;639E;E;S;20;{{15, 15}, {87, 21}}S;18;{{0, 0}, {87, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;AdaptiveS;21;{{15, 43}, {232, 21}}S;19;{{0, 0}, {232, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;Allows non-numeric formattingS;21;{{15, 70}, {187, 21}}S;19;{{0, 0}, {187, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;25;Zero pads fraction digitsS;22;{{17, 105}, {194, 25}}S;19;{{0, 0}, {194, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;545E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;625E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;548E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;369E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;371E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;12S;13;Binary FormatS;17;_popUpItemAction:S;14;Decimal FormatS;20;System Memory FormatS;18;System File FormatS;22;{{278, 43}, {124, 21}}S;19;{{0, 0}, {124, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;14;Includes countS;22;{{278, 70}, {114, 21}}S;19;{{0, 0}, {114, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;Includes unitS;22;{{278, 16}, {197, 21}}S;19;{{0, 0}, {197, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;26;Includes actual byte countS;23;{{279, 105}, {195, 25}}S;19;{{0, 0}, {195, 25}}S;38;bordered+controlSizeRegular+pulls-downD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;UnitsS;7;DefaultS;3;AllS;5;BytesS;2;MBS;2;GBS;2;KBS;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;243E;E;E;D;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;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;E;E;S;19;autoresizesSubviewsS;28;_CPFontSystemFacePlaceholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;426E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;426E;E;E;S;20;{{1, -5}, {501, 99}}S;19;{{0, 0}, {501, 99}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;232E;E;E;d;2;18S;6;_NS:11D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;f;18;0.6862745098039216S;22;{{1, 9.5}, {501, 150}}S;20;{{0, 0}, {501, 150}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;250E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPCursor/AppController.j b/Tests/Manual/CPCursor/AppController.j index 0e2f3eabb..e5fcb4392 100644 --- a/Tests/Manual/CPCursor/AppController.j +++ b/Tests/Manual/CPCursor/AppController.j @@ -5,7 +5,7 @@ @import @implementation CursorTester : CPView -{ +{ CPCursor testCursor; CPTextField label; } @@ -15,6 +15,7 @@ cursor:(CPCursor)aCursor { self = [super init]; + if (self) { testCursor = aCursor; @@ -26,7 +27,16 @@ anOrigin.y, [label frame].size.width, [label frame].size.height)]; + + var trackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:self + userInfo:nil]; + + [self addTrackingArea:trackingArea]; +; } + return self; } @@ -57,7 +67,7 @@ yInc = 25, imageCursorTester = [[CursorTester alloc] initWithText:@"Image cursor" origin:CGPointMake(x, y) - cursor:[[CPCursor alloc] initWithImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle mainBundle] resourcePath] + @"spinner.gif"] + cursor:[[CPCursor alloc] initWithImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle mainBundle] resourcePath] + @"spinner.gif"] hotSpot:CGPointMakeZero()]], arrowCursorTester = [[CursorTester alloc] initWithText:@"Arrow cursor" origin:CGPointMake(x, y+=yInc) @@ -110,7 +120,7 @@ disappearingItemCursorTester = [[CursorTester alloc] initWithText:@"Disappearing item cursor" origin:CGPointMake(x, y+=yInc) cursor:[CPCursor disappearingItemCursor]]; - + [contentView addSubview:imageCursorTester]; [contentView addSubview:arrowCursorTester]; [contentView addSubview:crosshairCursorTester]; diff --git a/Tests/Manual/CPDatePickerTest/Resources/MainMenu.cib b/Tests/Manual/CPDatePickerTest/Resources/MainMenu.cib index 7d9080571..acd80bb55 100644 --- a/Tests/Manual/CPDatePickerTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPDatePickerTest/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;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;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;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;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;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;80E;D;K;6;CP$UIDd;2;82E;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;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;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;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;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;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;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;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;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;3;170E;D;K;6;CP$UIDd;3;171E;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;3;174E;D;K;6;CP$UIDd;3;175E;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;3;179E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;181E;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;3;184E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;185E;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;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;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;1;0E;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;200E;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;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;82E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;82E;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;3;101E;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;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;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;101E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;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;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;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;3;159E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;168E;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;3;159E;D;K;6;CP$UIDd;3;172E;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;3;159E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;168E;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;205E;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;206E;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;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;172E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;161E;K;23;_CPCibConnectorLabelKeyD;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;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;192E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;187E;K;23;_CPCibConnectorLabelKeyD;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;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;184E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;157E;K;23;_CPCibConnectorLabelKeyD;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;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;187E;K;23;_CPCibConnectorLabelKeyD;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;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;192E;K;23;_CPCibConnectorLabelKeyD;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;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;184E;K;23;_CPCibConnectorLabelKeyD;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;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;157E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;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;28E;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;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;141E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;80E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;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;3;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;172E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;253E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;256E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;262E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;263E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;266E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;268E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;269E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;272E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;275E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;278E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;150E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;281E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;282E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;150E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;281E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;285E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;288E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;289E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;292E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;293E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;296E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;205E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;298E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;299E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;300E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;85E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;85E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;301E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;304E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;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;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;85E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;309E;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;85E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;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;85E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;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;85E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;313E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;91E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;313E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;314E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;316E;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;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;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;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;318E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;319E;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;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;320E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;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;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;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;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;321E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;98E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;98E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;321E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;322E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;323E;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;98E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;101E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;325E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;327E;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;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;328E;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;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;329E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;330E;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;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;331E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;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;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;332E;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;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;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;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;336E;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;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;337E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;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;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;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;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;339E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;341E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;342E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;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;344E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;345E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;346E;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;347E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;348E;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;349E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;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;352E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;353E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;354E;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;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;357E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;358E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;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;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;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;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;361E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;362E;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;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;363E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;364E;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;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;125E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;365E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;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;125E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;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;125E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;129E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;369E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;370E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;371E;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;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;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;352E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;353E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;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;344E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;345E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;134E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;134E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;374E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;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;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;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;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;379E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;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;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;382E;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;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;140E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;140E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;384E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;385E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;386E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;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;140E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;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;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;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;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;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;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;391E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;146E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;146E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;391E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;392E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;393E;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;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;394E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;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;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;10;$classnameS;18;CPObjectControllerK;8;$classesA;S;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;397E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;306E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;398E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;152E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;399E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;400E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;401E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;402E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;403E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;349E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;404E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;155E;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;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;406E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;406E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;407E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;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;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;420E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;355E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;355E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;422E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;423E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;424E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;420E;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;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;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;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;425E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;405E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;428E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;405E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;355E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;429E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;405E;K;14;CPBoxTitleViewD;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;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;201E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;352E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;439E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;202E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;440E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;441E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;165E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;165E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;204E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;443E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;405E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;168E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;445E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;168E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;168E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;203E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;447E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;405E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;172E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;449E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;172E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;172E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;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;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;455E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;458E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;459E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;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;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;461E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;462E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;465E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;466E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;467E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;468E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;470E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;405E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;428E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;$aborder-widthD;K;6;CP$UIDd;3;405E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;405E;K;16;$acontent-marginD;K;6;CP$UIDd;3;472E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;352E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;344E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;473E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;405E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;474E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;423E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;405E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;405E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;476E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;477E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;478E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;423E;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;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;480E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;481E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;482E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;484E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;485E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;424E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;405E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;405E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;476E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;486E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;487E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;424E;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;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;488E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;489E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;490E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;491E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;470E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;405E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;428E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;$aborder-widthD;K;6;CP$UIDd;3;405E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;405E;K;16;$acontent-marginD;K;6;CP$UIDd;3;492E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;352E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;344E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;473E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;405E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;493E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;494E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;495E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;496E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;497E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;498E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;405E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;405E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;476E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;499E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;500E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;498E;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;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;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;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;503E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;504E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;505E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;506E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;507E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;508E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;510E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;511E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;421E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;512E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;513E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;352E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;12;$atext-colorD;K;6;CP$UIDd;3;515E;K;6;$afontD;K;6;CP$UIDd;3;516E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;517E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;352E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;513E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;352E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;12;$atext-colorD;K;6;CP$UIDd;3;519E;K;6;$afontD;K;6;CP$UIDd;3;520E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;517E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;352E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;24;CPUserDefaultsControllerK;8;$classesA;S;24;CPUserDefaultsControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;33;CPUserDefaultsControllerSharedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;522E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;523E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;524E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;525E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;153E;E;E;S;8;delegateS;18;buttonElementsDateS;18;buttonElementsTimeS;11;buttonStyleS;17;pickerCurrentDateS;13;pickerMaxDateS;13;pickerMinDateS;12;pickerTargetS;9;theWindowS;11;nextKeyViewS;7;contentS;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;15;updateElements:S;23;updateHasMinConstraint:S;23;updateHasMaxConstraint:S;27;value: pickerTarget.enabledS;5;valueS;20;pickerTarget.enabledD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;32;value: pickerTarget.timeIntervalS;25;pickerTarget.timeIntervalD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;K;25;CPConditionallySetsHiddenD;K;6;CP$UIDd;3;306E;E;E;S;31;value: pickerTarget.objectValueS;24;pickerTarget.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;28;value: pickerTarget.borderedS;21;pickerTarget.borderedD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;35;value: pickerTarget.drawsBackgroundS;28;pickerTarget.drawsBackgroundD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;29;value: pickerTarget.dateValueS;22;pickerTarget.dateValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.maxDateS;20;pickerTarget.maxDateD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.minDateS;20;pickerTarget.minDateD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;37;selectedTag: selection.datePickerModeS;11;selectedTagS;24;selection.datePickerModeD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;38;selectedTag: selection.datePickerStyleS;25;selection.datePickerStyleD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;35;maxValue: pickerMaxDate.objectValueS;8;maxValueS;25;pickerMaxDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;35;minValue: pickerMinDate.objectValueS;8;minValueS;25;pickerMinDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;36;value: pickerCurrentDate.objectValueS;29;pickerCurrentDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;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;3;133E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;97E;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;89E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;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;92E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;93E;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;99E;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;3;104E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;124E;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;3;117E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;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;122E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;123E;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;127E;D;K;6;CP$UIDd;3;126E;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;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;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;138E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;144E;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;141E;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;147E;D;K;6;CP$UIDd;3;148E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;12;CPDatePickerS;13;AppControllerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{133, 112}, {885, 477}}S;21;{{0, 0}, {1440, 878}}S;17;CPDatePicker Testd;1;0S;20;{{0, 0}, {885, 477}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;E;E;S;6;normalS;6;{1, 1}S;24;{{456, 161}, {273, 148}}S;20;{{0, 0}, {273, 148}}d;2;36D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;526E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;528E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;D;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;529E;E;d;1;4d;3;510D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;530E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;531E;E;S;22;{{21, 75}, {355, 382}}S;20;{{0, 0}, {355, 382}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;430E;E;E;S;3;boxS;10;ParametersD;K;6;$classD;K;6;CP$UIDd;3;154E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;542E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;543E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;544E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;546E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;E;S;22;{{104, 16}, {230, 25}}S;19;{{0, 0}, {230, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegulard;2;12S;9;GraphicalS;17;_popUpItemAction:S;20;Textual with StepperS;7;TextualS;22;{{104, 46}, {230, 25}}S;11;Single DateS;10;Date RangeS;22;{{104, 77}, {230, 25}}S;4;NoneS;14;Month and YearS;19;Month, Day and YearS;23;{{104, 108}, {230, 25}}S;23;Hour, Minute and SecondS;15;Hour and MinuteS;20;{{18, 18}, {78, 17}}S;18;{{0, 0}, {78, 17}}S;9;textfieldS;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;528E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;306E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;5;StyleD;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;532E;E;S;20;{{18, 50}, {78, 17}}S;7;SelectsS;20;{{18, 81}, {78, 17}}S;8;ElementsS;22;{{106, 138}, {89, 21}}S;18;{{0, 0}, {89, 21}}S;9;check-boxS;36;controlSizeRegular+disabled+selectedS;9;Time zoneS;22;{{199, 138}, {76, 21}}S;18;{{0, 0}, {76, 21}}S;3;EraS;20;{{2, 163}, {357, 5}}S;18;{{0, 0}, {357, 5}}D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;471E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;533E;E;S;3;BoxS;23;{{104, 193}, {230, 29}}S;19;{{0, 0}, {230, 29}}d;3;238D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;535E;E;S;21;{{18, 174}, {78, 17}}S;11;ConstraintsS;23;{{106, 170}, {113, 21}}S;19;{{0, 0}, {113, 21}}S;27;controlSizeRegular+selectedS;12;Minimum dateS;23;{{104, 245}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;535E;E;S;23;{{106, 222}, {116, 21}}S;19;{{0, 0}, {116, 21}}S;12;Maximum dateS;20;{{2, 277}, {357, 5}}D;K;6;$classD;K;6;CP$UIDd;3;471E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;533E;E;S;21;{{18, 290}, {78, 17}}S;4;DateS;21;{{18, 315}, {78, 17}}S;7;DisplayS;23;{{104, 284}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;536E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;535E;E;S;22;{{106, 313}, {97, 21}}S;18;{{0, 0}, {97, 21}}S;10;BackgroundS;22;{{106, 333}, {97, 21}}S;6;BorderS;22;{{106, 353}, {97, 21}}S;7;EnabledS;21;{{20, 20}, {162, 29}}S;19;{{0, 0}, {162, 29}}D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;537E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;306E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;17;CPDatePicker testS;22;{{416, 75}, {356, 21}}S;19;{{0, 0}, {356, 21}}D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;514E;K;4;nameD;K;6;CP$UIDd;3;538E;K;12;defaultValueD;K;6;CP$UIDd;3;539E;K;6;valuesD;K;6;CP$UIDd;3;540E;E;D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;537E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;5;LabelS;23;{{416, 104}, {356, 21}}D;K;6;$classD;K;6;CP$UIDd;3;514E;K;4;nameD;K;6;CP$UIDd;3;538E;K;12;defaultValueD;K;6;CP$UIDd;3;539E;K;6;valuesD;K;6;CP$UIDd;3;541E;E;D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;537E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;162E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;169E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;E;E;S;17;.Lucida Grande UId;2;13d;13;1355344212000d;15;-62135554022000d;14;64092254400000D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;355E;E;E;S;22;{"width":0,"height":0}d;15;-62135510400000d;14;64092297600000d;13;1355343132000d;2;17S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;548E;E;D;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;539E;K;6;normalD;K;6;CP$UIDd;3;549E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;539E;K;6;normalD;K;6;CP$UIDd;3;550E;E;E;S;21;{{1, -5}, {361, 386}}S;20;{{0, 0}, {361, 386}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;195E;E;E;d;2;18S;6;_NS:11f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;355E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;551E;E;D;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;552E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;355E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;355E;E;E;f;12;0.3455284834E;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;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;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;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;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;82E;D;K;6;CP$UIDd;2;84E;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;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;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;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;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;146E;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;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;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;3;165E;D;K;6;CP$UIDd;3;166E;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;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;1;0E;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;1;0E;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;179E;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;3;181E;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;185E;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;3;192E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;1;0E;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;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;84E;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;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;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;103E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;148E;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;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;163E;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;3;161E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;170E;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;3;161E;D;K;6;CP$UIDd;3;174E;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;3;161E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;174E;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;161E;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;161E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;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;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;170E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;174E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;163E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;194E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;186E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;159E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;155E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;194E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;186E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;159E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;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;30E;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;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;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;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;170E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;263E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;264E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;267E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;196E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;270E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;273E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;276E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;279E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;282E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;152E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;285E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;286E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;152E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;285E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;289E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;292E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;293E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;296E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;297E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;300E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;301E;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;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;302E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;303E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;304E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;87E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;305E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;308E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;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;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;313E;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;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;314E;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;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;315E;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;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;93E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;317E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;318E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;319E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;320E;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;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;321E;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;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;323E;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;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;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;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;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;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;100E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;325E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;327E;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;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;328E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;329E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;332E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;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;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;336E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;337E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;339E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;340E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;341E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;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;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;342E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;343E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;345E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;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;348E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;349E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;350E;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;351E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;352E;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;353E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;354E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;355E;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;356E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;357E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;358E;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;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;361E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;362E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;364E;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;365E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;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;367E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;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;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;369E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;370E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;371E;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;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;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;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;373E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;374E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;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;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;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;356E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;357E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;377E;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;348E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;349E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;136E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;136E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;378E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;379E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;382E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;385E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;387E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;142E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;142E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;388E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;389E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;391E;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;142E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;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;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;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;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;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;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;395E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;148E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;148E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;395E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;396E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;397E;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;148E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;398E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;399E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;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;148E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;10;$classnameS;18;CPObjectControllerK;8;$classesA;S;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;151E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;401E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;310E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;402E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;154E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;403E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;404E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;405E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;406E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;407E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;353E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;408E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;157E;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;156E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;410E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;411E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;414E;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;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;424E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;359E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;359E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;428E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;429E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;430E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;426E;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;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;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;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;433E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;409E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;435E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;409E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;359E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;436E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;409E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;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;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;203E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;438E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;442E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;443E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;356E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;449E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;204E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;451E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;452E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;454E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;205E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;455E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;457E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;409E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;170E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;170E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;460E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;170E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;206E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;461E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;462E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;409E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;174E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;174E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;174E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;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;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;465E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;469E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;470E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;472E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;442E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;473E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;474E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;475E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;451E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;476E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;477E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;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;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;481E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;483E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;484E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;485E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;486E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;481E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;487E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;488E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;489E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;490E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;409E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;16;$acontent-marginD;K;6;CP$UIDd;3;492E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;409E;K;14;$aborder-widthD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;493E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;356E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;348E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;494E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;409E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;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;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;497E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;429E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;409E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;409E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;498E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;499E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;500E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;429E;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;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;501E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;502E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;503E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;504E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;505E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;506E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;508E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;509E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;510E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;511E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;430E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;409E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;409E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;498E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;512E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;513E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;430E;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;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;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;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;516E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;517E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;490E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;409E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;16;$acontent-marginD;K;6;CP$UIDd;3;519E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;409E;K;14;$aborder-widthD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;520E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;356E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;348E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;494E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;409E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;522E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;523E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;524E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;525E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;526E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;527E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;528E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;529E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;530E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;531E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;409E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;409E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;498E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;532E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;533E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;531E;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;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;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;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;536E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;537E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;538E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;539E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;540E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;541E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;542E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;543E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;544E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;545E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;547E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;548E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;427E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;549E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;550E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;551E;K;12;$atext-colorD;K;6;CP$UIDd;3;553E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;554E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;356E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;556E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;550E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;557E;K;12;$atext-colorD;K;6;CP$UIDd;3;558E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;559E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;356E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;10;$classnameS;24;CPUserDefaultsControllerK;8;$classesA;S;24;CPUserDefaultsControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;201E;K;33;CPUserDefaultsControllerSharedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;561E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;562E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;563E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;564E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;155E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;565E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;312E;E;E;S;8;delegateS;18;buttonElementsDateS;18;buttonElementsTimeS;11;buttonStyleS;17;pickerCurrentDateS;13;pickerMaxDateS;13;pickerMinDateS;12;pickerTargetS;9;theWindowS;11;nextKeyViewS;7;contentS;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;15;updateElements:S;23;updateHasMinConstraint:S;23;updateHasMaxConstraint:S;27;value: pickerTarget.enabledS;5;valueS;20;pickerTarget.enabledD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;32;value: pickerTarget.timeIntervalS;25;pickerTarget.timeIntervalD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;25;CPConditionallySetsHiddenD;K;6;CP$UIDd;3;310E;E;E;S;31;value: pickerTarget.objectValueS;24;pickerTarget.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;28;value: pickerTarget.borderedS;21;pickerTarget.borderedD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;35;value: pickerTarget.drawsBackgroundS;28;pickerTarget.drawsBackgroundD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;29;value: pickerTarget.dateValueS;22;pickerTarget.dateValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.maxDateS;20;pickerTarget.maxDateD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.minDateS;20;pickerTarget.minDateD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;37;selectedTag: selection.datePickerModeS;11;selectedTagS;24;selection.datePickerModeD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;38;selectedTag: selection.datePickerStyleS;25;selection.datePickerStyleD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;35;maxValue: pickerMaxDate.objectValueS;8;maxValueS;25;pickerMaxDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;35;minValue: pickerMinDate.objectValueS;8;minValueS;25;pickerMinDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;36;value: pickerCurrentDate.objectValueS;29;pickerCurrentDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;99E;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;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;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;94E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;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;3;101E;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;3;106E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;126E;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;3;119E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;116E;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;124E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;125E;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;129E;D;K;6;CP$UIDd;3;128E;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;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;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;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;146E;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;143E;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;149E;D;K;6;CP$UIDd;3;150E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;12;CPDatePickerS;13;AppControllerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{133, 112}, {885, 477}}S;21;{{0, 0}, {1440, 878}}S;17;CPDatePicker Testd;1;0S;20;{{0, 0}, {885, 477}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;E;E;S;6;normalS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;24;{{456, 166}, {270, 148}}S;20;{{0, 0}, {270, 148}}d;2;36D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;569E;E;d;1;4d;3;510D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;570E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;571E;E;S;22;{{21, 75}, {355, 382}}S;20;{{0, 0}, {355, 382}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;437E;E;E;S;3;boxD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;ParametersD;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;161E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;582E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;161E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;585E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;586E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;587E;E;S;22;{{104, 19}, {227, 25}}S;19;{{0, 0}, {227, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;-1d;2;12S;9;GraphicalS;17;_popUpItemAction:S;20;Textual with StepperS;7;TextualS;22;{{104, 49}, {227, 25}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Single DateS;10;Date RangeS;22;{{104, 80}, {227, 25}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;NoneS;14;Month and YearS;19;Month, Day and YearS;23;{{104, 111}, {227, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;Hour, Minute and SecondS;15;Hour and MinuteS;20;{{17, 18}, {80, 17}}S;18;{{0, 0}, {80, 17}}S;9;textfieldS;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;StyleD;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;572E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;S;20;{{17, 50}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;SelectsS;20;{{17, 81}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;ElementsS;22;{{101, 140}, {99, 21}}S;18;{{0, 0}, {99, 21}}S;9;check-boxS;36;controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;Time zoneS;22;{{194, 140}, {86, 21}}S;18;{{0, 0}, {86, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;3;EraS;20;{{2, 163}, {357, 5}}S;18;{{0, 0}, {357, 5}}D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;491E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;573E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;3;BoxS;23;{{104, 194}, {227, 29}}S;19;{{0, 0}, {227, 29}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;3;238D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;574E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;575E;E;S;21;{{17, 174}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;ConstraintsS;23;{{101, 172}, {123, 21}}S;19;{{0, 0}, {123, 21}}S;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;Minimum dateS;23;{{104, 246}, {227, 29}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;574E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;575E;E;S;23;{{101, 224}, {126, 21}}S;19;{{0, 0}, {126, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;Maximum dateS;20;{{2, 277}, {357, 5}}D;K;6;$classD;K;6;CP$UIDd;3;491E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;573E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{17, 290}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;DateS;21;{{17, 315}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;DisplayS;23;{{104, 285}, {227, 29}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;576E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;574E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;575E;E;S;23;{{101, 315}, {107, 21}}S;19;{{0, 0}, {107, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;BackgroundS;23;{{101, 335}, {107, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;BorderS;23;{{101, 355}, {107, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;EnabledS;21;{{19, 20}, {164, 29}}S;19;{{0, 0}, {164, 29}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;577E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;17;CPDatePicker testS;22;{{415, 75}, {358, 21}}S;19;{{0, 0}, {358, 21}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;577E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;552E;K;4;nameD;K;6;CP$UIDd;3;578E;K;12;defaultValueD;K;6;CP$UIDd;3;579E;K;6;valuesD;K;6;CP$UIDd;3;580E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;LabelS;23;{{415, 104}, {358, 21}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;577E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;552E;K;4;nameD;K;6;CP$UIDd;3;578E;K;12;defaultValueD;K;6;CP$UIDd;3;579E;K;6;valuesD;K;6;CP$UIDd;3;581E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;164E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;171E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;E;E;S;19;autoresizesSubviewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;359E;E;E;S;5;colorS;28;_CPFontSystemFacePlaceholderd;13;1355344212000d;15;-62135554022000d;14;64092254400000D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;359E;E;E;S;22;{"width":0,"height":0}d;15;-62135510400000d;14;64092297600000d;13;1355343132000d;2;17S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;589E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;579E;K;6;normalD;K;6;CP$UIDd;3;590E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;579E;K;6;normalD;K;6;CP$UIDd;3;591E;E;E;S;21;{{1, -5}, {361, 386}}S;20;{{0, 0}, {361, 386}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;197E;E;E;d;2;18S;6;_NS:11D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;359E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;D;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;593E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;359E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;359E;E;E;f;12;0.3455284834E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPFormatterTest/AppController.j b/Tests/Manual/CPFormatterTest/AppController.j index b0faa01b7..14a9daea2 100644 --- a/Tests/Manual/CPFormatterTest/AppController.j +++ b/Tests/Manual/CPFormatterTest/AppController.j @@ -22,14 +22,14 @@ var randomFromTo = function(from, to) @implementation AppController : CPObject { - CPWindow theWindow; - CPTextField dateField1; - CPTextField dateField2; - CPTextField error1; - CPTextField textField; - CPTextField error2; - CPTextField recordField; - CPPopUpButton recordMenu; + @outlet CPWindow theWindow; + @outlet CPTextField dateField1; + @outlet CPTextField dateField2; + @outlet CPTextField error1; + @outlet CPTextField textField; + @outlet CPTextField error2; + @outlet CPTextField recordField; + @outlet CPPopUpButton recordMenu; } - (void)awakeFromCib @@ -44,17 +44,15 @@ var randomFromTo = function(from, to) name:CPTextFieldDidFocusNotification object:nil]; - [textField setFormatter:[TextFormatter new]]; [textField setDelegate:self]; [error1 setStringValue:@""]; [error2 setStringValue:@""]; - [recordField setFormatter:[ContactFormatter new]]; [recordField setObjectValue:RecordData[0]]; } -- (void)selectRecord:(id)sender +- (@action)selectRecord:(id)sender { var record = RecordData[[sender selectedIndex]]; @@ -212,7 +210,7 @@ var randomFromTo = function(from, to) else anObject(aString); - result = error === nil; + var result = error === nil; CPLog.info("getObjectValue:forString:%s ==> %s", aString, result); return result; diff --git a/Tests/Manual/CPFormatterTest/Resources/MainMenu.cib b/Tests/Manual/CPFormatterTest/Resources/MainMenu.cib index 5a3e2e980..ba7171531 100644 --- a/Tests/Manual/CPFormatterTest/Resources/MainMenu.cib +++ b/Tests/Manual/CPFormatterTest/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;21E;D;K;6;CP$UIDd;2;22E;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;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;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;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;52E;D;K;6;CP$UIDd;1;0E;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;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;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;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;1;0E;D;K;6;CP$UIDd;2;68E;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;1;0E;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;2;84E;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;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;11E;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;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;85E;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;86E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;57E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;71E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;75E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;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;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;104E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;85E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;111E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;112E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;113E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;114E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;115E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;116E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;117E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;44E;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;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;119E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;120E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;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;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;134E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;133E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;136E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;137E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;141E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;142E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;143E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;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;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;146E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;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;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;150E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;151E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;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;2;51E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;84E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;154E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;155E;K;11;$aalignmentD;K;6;CP$UIDd;3;118E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;156E;K;7;$aimageD;K;6;CP$UIDd;3;157E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;158E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;159E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;160E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;161E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;164E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;165E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;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;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;134E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;133E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;136E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;166E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;167E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;168E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;169E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;170E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;171E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;172E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;176E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;177E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;179E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;181E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;182E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;183E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;184E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;185E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;187E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;188E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;189E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;190E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;192E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;194E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;195E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;196E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;197E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;198E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;177E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;199E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;200E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;201E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;202E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;203E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;204E;K;11;$aalignmentD;K;6;CP$UIDd;3;118E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;205E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;161E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;161E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;206E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;207E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;208E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;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;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;134E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;133E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;136E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;209E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;211E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;169E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;213E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;214E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;215E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;90E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;216E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;217E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;182E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;218E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;219E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;185E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;220E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;187E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;189E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;222E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;182E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;224E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;225E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;185E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;226E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;187E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;227E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;189E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;228E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;229E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;230E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;10;dateField1S;10;dateField2S;6;error1S;6;error2S;11;recordFieldS;10;recordMenuS;9;textFieldS;9;theWindowS;13;selectRecord:S;9;setDate1:S;9;setDate2:S;7;setNil:S;13;objectValue1:S;13;objectValue2:S;11;setEmptyOK:S;15;deleteForward2:S;16;deleteBackward1:S;8;delete1:S;16;deleteBackward2:S;8;delete2:S;15;deleteForward1:S;15;deleteForward3:S;16;deleteBackward3:S;8;delete3:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1886912512S;24;{{353, 265}, {734, 348}}S;21;{{0, 0}, {1440, 878}}d;1;7S;21;CPFormatter & Friendsd;1;0S;20;{{0, 0}, {734, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;52E;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;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;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;E;E;S;6;normalS;6;{1, 1}F;S;21;{{90, 35}, {279, 29}}S;19;{{0, 0}, {279, 29}}d;2;36S;9;textfieldS;28;bezeled+editable+placeholderd;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;131E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;231E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;232E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;E;T;S;0;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;233E;E;S;20;{{34, 42}, {44, 17}}S;18;{{0, 0}, {44, 17}}S;6;Date 1D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;234E;E;S;21;{{34, 304}, {52, 17}}S;18;{{0, 0}, {52, 17}}S;7;Record:S;22;{{99, 304}, {194, 17}}S;19;{{0, 0}, {194, 17}}S;4;nameS;21;{{99, 14}, {276, 17}}S;19;{{0, 0}, {276, 17}}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;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;238E;E;S;41;Input: mm/dd/yyyy Display: abbreviatedS;23;{{205, 298}, {121, 25}}S;19;{{0, 0}, {121, 25}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;131E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;231E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;232E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;d;2;12S;8;Tom - 34S;17;_popUpItemAction:d;1;1d;7;1048576S;9;Dick - 27S;10;Harry - 50S;22;{{90, 142}, {279, 29}}S;21;{{34, 149}, {44, 17}}S;6;Date 2S;22;{{99, 121}, {351, 17}}S;19;{{0, 0}, {351, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;242E;E;S;40;Input: mm-dd-yyyy Display: mm-dd-yyyyS;21;{{406, 36}, {66, 25}}S;18;{{0, 0}, {66, 25}}S;6;buttonS;17;bordered+selectedD;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;6;Randomd;2;14S;21;{{406, 72}, {72, 25}}S;18;{{0, 0}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;8;Delete ←S;21;{{493, 72}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;8;Delete →S;21;{{578, 72}, {55, 25}}S;18;{{0, 0}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;6;DeleteS;21;{{493, 36}, {88, 25}}S;18;{{0, 0}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;11;objectValueS;21;{{604, 36}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;7;Set nilS;22;{{406, 141}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{493, 141}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{604, 144}, {93, 21}}S;18;{{0, 0}, {93, 21}}S;9;check-boxS;8;selectedS;8;Empty OKS;22;{{99, 173}, {276, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;243E;E;S;22;{{90, 230}, {279, 29}}S;21;{{34, 237}, {44, 17}}S;4;TextS;22;{{99, 209}, {351, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;244E;E;S;32;Input: [a-zA-Z0-9], max length 7S;22;{{99, 261}, {276, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;245E;E;S;22;{{406, 176}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{493, 176}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{578, 176}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{406, 230}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{493, 230}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{578, 230}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;13;AppControllerS;10;OtherViewsD;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;55E;D;K;6;CP$UIDd;2;56E;E;E;S;17;.Lucida Grande UId;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;161E;E;E;S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;247E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;248E;E;E;S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;131E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;231E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;232E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;249E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;250E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;251E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;252E;E;E;f;18;0.6862745098039216D;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;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;161E;E;E;f;3;0.5f;12;0.8816326531E;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;D;K;6;CP$UIDd;2;22E;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;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;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;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;52E;D;K;6;CP$UIDd;1;0E;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;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;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;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;1;0E;D;K;6;CP$UIDd;2;68E;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;1;0E;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;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;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;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;72E;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;88E;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;89E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;57E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;71E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;75E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;97E;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;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;104E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;112E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;88E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;114E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;115E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;116E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;117E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;118E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;119E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;120E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;44E;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;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;122E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;127E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;128E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;132E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;137E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;138E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;142E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;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;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;146E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;147E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;151E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;152E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;153E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;155E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;156E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;2;84E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;157E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;160E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;162E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;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;51E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;86E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;163E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;165E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;166E;K;6;$afontD;K;6;CP$UIDd;3;167E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;136E;K;11;$aalignmentD;K;6;CP$UIDd;3;121E;K;7;$aimageD;K;6;CP$UIDd;3;168E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;169E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;121E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;170E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;171E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;173E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;175E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;176E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;177E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;132E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;178E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;138E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;142E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;179E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;180E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;181E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;184E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;185E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;186E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;187E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;188E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;191E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;192E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;195E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;197E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;198E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;199E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;200E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;201E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;202E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;203E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;204E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;206E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;207E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;208E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;209E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;211E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;212E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;213E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;214E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;188E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;215E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;216E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;217E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;218E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;188E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;219E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;220E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;221E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;223E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;213E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;2;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;224E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;225E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;227E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;121E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;228E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;229E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;173E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;173E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;230E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;231E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;232E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;233E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;132E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;234E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;2;87E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;138E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;142E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;235E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;239E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;240E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;241E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;242E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;244E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;93E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;245E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;246E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;247E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;199E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;249E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;250E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;203E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;251E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;252E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;253E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;208E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;255E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;256E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;199E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;257E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;258E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;259E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;203E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;260E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;261E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;262E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;208E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;263E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;264E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;265E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;266E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;268E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;265E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;10;dateField1S;10;dateField2S;6;error1S;6;error2S;11;recordFieldS;10;recordMenuS;9;textFieldS;9;theWindowS;13;selectRecord:S;9;setDate1:S;9;setDate2:S;7;setNil:S;13;objectValue1:S;13;objectValue2:S;11;setEmptyOK:S;15;deleteForward2:S;16;deleteBackward1:S;8;delete1:S;16;deleteBackward2:S;8;delete2:S;15;deleteForward1:S;15;deleteForward3:S;16;deleteBackward3:S;8;delete3:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1886912512S;24;{{353, 265}, {734, 348}}S;21;{{0, 0}, {1440, 878}}d;1;7S;21;CPFormatter & Friendsd;1;0S;20;{{0, 0}, {734, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;52E;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;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;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;E;E;S;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{90, 36}, {279, 22}}S;19;{{0, 0}, {279, 22}}d;2;36S;9;textfieldS;47;bezeled+controlSizeRegular+editable+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;269E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;270E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;126E;E;d;1;2d;1;4D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;T;S;0;d;2;-1D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;271E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;S;20;{{33, 42}, {46, 17}}S;18;{{0, 0}, {46, 17}}S;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;Date 1D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;273E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;S;21;{{33, 304}, {54, 17}}S;18;{{0, 0}, {54, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;Record:S;22;{{98, 304}, {196, 17}}S;19;{{0, 0}, {196, 17}}S;30;controlSizeRegular+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{98, 14}, {278, 17}}S;19;{{0, 0}, {278, 17}}D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;41;Input: mm/dd/yyyy Display: abbreviatedS;23;{{205, 301}, {121, 25}}S;19;{{0, 0}, {121, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;133E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;269E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;270E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;126E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;12S;8;Tom - 34S;17;_popUpItemAction:d;1;1d;7;1048576S;9;Dick - 27S;10;Harry - 50S;22;{{90, 143}, {279, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{33, 149}, {46, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;Date 2S;22;{{98, 121}, {353, 17}}S;19;{{0, 0}, {353, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;40;Input: mm-dd-yyyy Display: mm-dd-yyyyS;21;{{408, 39}, {66, 25}}S;18;{{0, 0}, {66, 25}}S;6;buttonS;36;bordered+controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;Randomd;2;14S;21;{{408, 75}, {72, 25}}S;18;{{0, 0}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;Delete ←S;21;{{495, 75}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;Delete →S;21;{{580, 75}, {55, 25}}S;18;{{0, 0}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;DeleteS;21;{{495, 39}, {88, 25}}S;18;{{0, 0}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;objectValueS;21;{{606, 39}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;Set nilS;22;{{408, 144}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{495, 144}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{603, 146}, {103, 21}}S;19;{{0, 0}, {103, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;Empty OKS;22;{{98, 173}, {278, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{90, 231}, {279, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{33, 237}, {46, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;TextS;22;{{98, 209}, {353, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;32;Input: [a-zA-Z0-9], max length 7S;22;{{98, 261}, {278, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{408, 179}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{495, 179}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{580, 179}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{408, 233}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{495, 233}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{580, 233}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;AppControllerS;16;ContactFormatterS;17;IBCustomFormatterS;10;OtherViewsD;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;55E;D;K;6;CP$UIDd;2;56E;E;E;S;13;TextFormatterS;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;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;173E;E;E;S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;288E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;289E;E;E;S;5;imageD;K;10;$classnameS;6;CPNullK;8;$classesA;S;6;CPNullS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;279E;E;S;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;133E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;269E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;270E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;126E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;290E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;291E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;292E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;293E;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;296E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;297E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;298E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;173E;E;E;f;3;0.5f;12;0.8816326531E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib b/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib index 80b33556a..6b338ac14 100644 --- a/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib +++ b/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib @@ -1,13 +1,13 @@ - + - + - + @@ -46,7 +46,8 @@ - + + @@ -218,6 +219,7 @@ + @@ -321,14 +323,14 @@ - - - - - - - - + + + + + + + + diff --git a/Tests/Manual/CPLocalizationTest/AppController.j b/Tests/Manual/CPLocalizationTest/AppController.j new file mode 100644 index 000000000..1d4141578 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/AppController.j @@ -0,0 +1,53 @@ +/* + * AppController.j + * CPLocalizationTest + * + * Created by You on April 20, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (void)awakeFromCib +{ + var label = [CPTextField labelWithTitle:CPLocalizedString(@"Label from file", @"") + " -> Label title from en.lproj from first context"]; + [label setFrameOrigin:CGPointMake(20, 10)]; + [[theWindow contentView] addSubview:label]; + + var label2 = [CPTextField labelWithTitle:CPLocalizedString(@"Label from file", @"My second context.") + " -> Label title from en.lproj from second context"]; + [label2 setFrameOrigin:CGPointMake(20, 30)]; + [[theWindow contentView] addSubview:label2]; + + var label3 = [CPTextField labelWithTitle:CPLocalizedString(@"Label from file", @"My first context.") + " -> Label title from en.lproj from first context"]; + [label3 setFrameOrigin:CGPointMake(20, 50)]; + [[theWindow contentView] addSubview:label3]; + + var label4 = [CPTextField labelWithTitle:CPLocalizedStringFromTable(@"Label from file", @"SecondLocalizable", @"My first context.") + " -> Label title from first context from en.lproj from SecondLocalizable"]; + [label4 setFrameOrigin:CGPointMake(20, 70)]; + [[theWindow contentView] addSubview:label4]; + + var label5 = [CPTextField labelWithTitle:CPLocalizedString(@"Wrong key", @"") + " -> Wrong key"]; + [label5 setFrameOrigin:CGPointMake(20, 90)]; + [[theWindow contentView] addSubview:label5]; + + // 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. + + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullPlatformWindow:YES]; +} + +@end diff --git a/Tests/Manual/CPLocalizationTest/Info.plist b/Tests/Manual/CPLocalizationTest/Info.plist new file mode 100644 index 000000000..5b71bb727 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Info.plist @@ -0,0 +1,24 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPLocalizationTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2015, Your Company All rights reserved. + CPBundleLocalizableStrings + + Localizable.strings + SecondLocalizable.strings + MainMenu.strings + + CPBundleTypeOfLocalization + CPBundleBaseLocalizationType + CPBundleDefaultLanguage + en + + diff --git a/Tests/Manual/CPLocalizationTest/Jakefile b/Tests/Manual/CPLocalizationTest/Jakefile new file mode 100644 index 000000000..991dcebdc --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPLocalizationTest + * + * Created by You on April 20, 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 = "CPLocalizationTest"; + +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", "CPLocalizationTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPLocalizationTest"); + task.setIdentifier("com.yourcompany.CPLocalizationTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPLocalizationTest"); + 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, "CPLocalizationTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPLocalizationTest.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/CPLocalizationTest/Resources/Base.lproj/MainMenu.cib b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.cib new file mode 100644 index 000000000..2a05f4f95 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.cib @@ -0,0 +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;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;17E;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;1;0E;D;K;6;CP$UIDd;2;24E;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;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;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;25E;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;26E;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;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;24E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;28E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;25E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;29E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;30E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;31E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;32E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;33E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;34E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;36E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;21E;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;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;38E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;38E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;39E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;40E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;41E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;41E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;42E;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;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;21E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;43E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;44E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;21E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;45E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;46E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;47E;K;11;$aalignmentD;K;6;CP$UIDd;2;48E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;49E;K;6;$afontD;K;6;CP$UIDd;2;51E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;41E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;41E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;42E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;52E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;53E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;48E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;37E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;42E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;42E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;42E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;55E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;49E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;48E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;42E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;42E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;56E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 127}, {480, 360}}S;21;{{0, 0}, {1440, 877}}d;1;7D;K;10;$classnameS;20;_CPLocalizableStringK;8;$classesA;S;20;_CPLocalizableStringS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;22;CPLocalizableStringDevD;K;6;CP$UIDd;2;57E;K;22;CPLocalizableStringKeyD;K;6;CP$UIDd;2;58E;K;24;CPLocalizableStringValueD;K;6;CP$UIDd;2;57E;E;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;2;23E;E;E;S;6;normalS;6;{1, 1}F;S;22;{{20, 166}, {364, 17}}S;19;{{0, 0}, {364, 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;2;50E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;59E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;60E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;42E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;42E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;42E;E;T;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;22;CPLocalizableStringDevD;K;6;CP$UIDd;2;61E;K;22;CPLocalizableStringKeyD;K;6;CP$UIDd;2;62E;K;24;CPLocalizableStringValueD;K;6;CP$UIDd;2;61E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;63E;E;S;13;AppControllerS;6;WindowS;9;371.titleS;29;.Helvetica Neue DeskInterfaced;2;13S;29;Label not translated from xibS;9;461.titleD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;E;E;f;18;0.6862745098039216d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.xib b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.xib new file mode 100644 index 000000000..574a3dbb2 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.xib @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPLocalizationTest/Resources/en.lproj/Localizable.strings b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/Localizable.strings new file mode 100644 index 000000000..c5ebdefa5 Binary files /dev/null and b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/Localizable.strings differ diff --git a/Tests/Manual/CPLocalizationTest/Resources/en.lproj/MainMenu.strings b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/MainMenu.strings new file mode 100644 index 000000000..99058cdd2 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/MainMenu.strings @@ -0,0 +1,186 @@ + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */ +"5.title" = "Bring All to Front"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "19"; */ +"19.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "23"; */ +"23.title" = "Minimize"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "24"; */ +"24.title" = "Window"; + +/* Class = "NSMenu"; title = "AMainMenu"; ObjectID = "29"; */ +"29.title" = "AMainMenu"; + +/* Class = "NSMenuItem"; title = "NewApplication"; ObjectID = "56"; */ +"56.title" = "NewApplication"; + +/* Class = "NSMenu"; title = "NewApplication"; ObjectID = "57"; */ +"57.title" = "NewApplication"; + +/* Class = "NSMenuItem"; title = "About NewApplication"; ObjectID = "58"; */ +"58.title" = "About NewApplication"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "72"; */ +"72.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "73"; */ +"73.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Save"; ObjectID = "75"; */ +"75.title" = "Save"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "80"; */ +"80.title" = "Save As…"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "81"; */ +"81.title" = "File"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "82"; */ +"82.title" = "New"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */ +"83.title" = "File"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "103"; */ +"103.title" = "Help"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "106"; */ +"106.title" = "Help"; + +/* Class = "NSMenuItem"; title = "NewApplication Help"; ObjectID = "111"; */ +"111.title" = "NewApplication Help"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "112"; */ +"112.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "124"; */ +"124.title" = "Open Recent"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "125"; */ +"125.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "126"; */ +"126.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "129"; */ +"129.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Quit NewApplication"; ObjectID = "136"; */ +"136.title" = "Quit NewApplication"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "195"; */ +"195.title" = "Stop Speaking"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "196"; */ +"196.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "197"; */ +"197.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "198"; */ +"198.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "199"; */ +"199.title" = "Cut"; + +/* Class = "NSMenu"; title = "Spelling and Grammar"; ObjectID = "200"; */ +"200.title" = "Spelling and Grammar"; + +/* Class = "NSMenuItem"; title = "Check Spelling"; ObjectID = "201"; */ +"201.title" = "Check Spelling"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "202"; */ +"202.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "203"; */ +"203.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Show Spelling…"; ObjectID = "204"; */ +"204.title" = "Show Spelling…"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "205"; */ +"205.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "207"; */ +"207.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "208"; */ +"208.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "209"; */ +"209.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "210"; */ +"210.title" = "Jump to Selection"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "211"; */ +"211.title" = "Speech"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "212"; */ +"212.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "213"; */ +"213.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "215"; */ +"215.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "216"; */ +"216.title" = "Spelling and Grammar"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "217"; */ +"217.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "218"; */ +"218.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "219"; */ +"219.title" = "Check Spelling While Typing"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "220"; */ +"220.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "221"; */ +"221.title" = "Use Selection for Find"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "239"; */ +"239.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "295"; */ +"295.title" = "View"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "296"; */ +"296.title" = "View"; + +/* Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "297"; */ +"297.title" = "Show Toolbar"; + +/* Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "298"; */ +"298.title" = "Customize Toolbar…"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "346"; */ +"346.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "348"; */ +"348.title" = "Substitutions"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "349"; */ +"349.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "350"; */ +"350.title" = "Smart Copy/Paste"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "351"; */ +"351.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "354"; */ +"354.title" = "Smart Links"; + +/* Class = "NSWindow"; title = "Window"; ObjectID = "371"; */ +"371.title" = "Window"; + +/* Class = "NSTextFieldCell"; title = "Label not translated from xib"; ObjectID = "461"; */ +"461.title" = "Label translated from xib in english"; diff --git a/Tests/Manual/CPLocalizationTest/Resources/en.lproj/SecondLocalizable.strings b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/SecondLocalizable.strings new file mode 100644 index 000000000..c70c542d4 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/SecondLocalizable.strings @@ -0,0 +1,2 @@ +/* My first context. */ +"Label from file" = "Label title from en.lproj from first context from SecondLocalizable"; diff --git a/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/Localizable.strings b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/Localizable.strings new file mode 100644 index 000000000..f200b3f07 Binary files /dev/null and b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/Localizable.strings differ diff --git a/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/MainMenu.strings b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/MainMenu.strings new file mode 100644 index 000000000..8ae402c02 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/MainMenu.strings @@ -0,0 +1,186 @@ + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */ +"5.title" = "Bring All to Front"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "19"; */ +"19.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "23"; */ +"23.title" = "Minimize"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "24"; */ +"24.title" = "Window"; + +/* Class = "NSMenu"; title = "AMainMenu"; ObjectID = "29"; */ +"29.title" = "AMainMenu"; + +/* Class = "NSMenuItem"; title = "NewApplication"; ObjectID = "56"; */ +"56.title" = "NewApplication"; + +/* Class = "NSMenu"; title = "NewApplication"; ObjectID = "57"; */ +"57.title" = "NewApplication"; + +/* Class = "NSMenuItem"; title = "About NewApplication"; ObjectID = "58"; */ +"58.title" = "About NewApplication"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "72"; */ +"72.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "73"; */ +"73.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Save"; ObjectID = "75"; */ +"75.title" = "Save"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "80"; */ +"80.title" = "Save As…"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "81"; */ +"81.title" = "File"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "82"; */ +"82.title" = "New"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */ +"83.title" = "File"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "103"; */ +"103.title" = "Help"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "106"; */ +"106.title" = "Help"; + +/* Class = "NSMenuItem"; title = "NewApplication Help"; ObjectID = "111"; */ +"111.title" = "NewApplication Help"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "112"; */ +"112.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "124"; */ +"124.title" = "Open Recent"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "125"; */ +"125.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "126"; */ +"126.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "129"; */ +"129.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Quit NewApplication"; ObjectID = "136"; */ +"136.title" = "Quit NewApplication"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "195"; */ +"195.title" = "Stop Speaking"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "196"; */ +"196.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "197"; */ +"197.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "198"; */ +"198.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "199"; */ +"199.title" = "Cut"; + +/* Class = "NSMenu"; title = "Spelling and Grammar"; ObjectID = "200"; */ +"200.title" = "Spelling and Grammar"; + +/* Class = "NSMenuItem"; title = "Check Spelling"; ObjectID = "201"; */ +"201.title" = "Check Spelling"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "202"; */ +"202.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "203"; */ +"203.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Show Spelling…"; ObjectID = "204"; */ +"204.title" = "Show Spelling…"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "205"; */ +"205.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "207"; */ +"207.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "208"; */ +"208.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "209"; */ +"209.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "210"; */ +"210.title" = "Jump to Selection"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "211"; */ +"211.title" = "Speech"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "212"; */ +"212.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "213"; */ +"213.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "215"; */ +"215.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "216"; */ +"216.title" = "Spelling and Grammar"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "217"; */ +"217.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "218"; */ +"218.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "219"; */ +"219.title" = "Check Spelling While Typing"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "220"; */ +"220.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "221"; */ +"221.title" = "Use Selection for Find"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "239"; */ +"239.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "295"; */ +"295.title" = "View"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "296"; */ +"296.title" = "View"; + +/* Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "297"; */ +"297.title" = "Show Toolbar"; + +/* Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "298"; */ +"298.title" = "Customize Toolbar…"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "346"; */ +"346.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "348"; */ +"348.title" = "Substitutions"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "349"; */ +"349.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "350"; */ +"350.title" = "Smart Copy/Paste"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "351"; */ +"351.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "354"; */ +"354.title" = "Smart Links"; + +/* Class = "NSWindow"; title = "Window"; ObjectID = "371"; */ +"371.title" = "Window"; + +/* Class = "NSTextFieldCell"; title = "Label not translated from xib"; ObjectID = "461"; */ +"461.title" = "Label traduit du xib en français"; \ No newline at end of file diff --git a/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/SecondLocalizable.strings b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/SecondLocalizable.strings new file mode 100644 index 000000000..6de1256c8 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/SecondLocalizable.strings @@ -0,0 +1,2 @@ +/* My first context. */ +"Label from file" = "Label traduit de en.lproj du premier context de SecondLocalizable"; diff --git a/Tests/Manual/CPLocalizationTest/index-debug.html b/Tests/Manual/CPLocalizationTest/index-debug.html new file mode 100644 index 000000000..13c385d7e --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPLocalizationTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPLocalizationTest/index.html b/Tests/Manual/CPLocalizationTest/index.html new file mode 100644 index 000000000..e80f2fe83 --- /dev/null +++ b/Tests/Manual/CPLocalizationTest/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPLocalizationTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/Issue-1357-fix/main.j b/Tests/Manual/CPLocalizationTest/main.j similarity index 58% rename from Tests/Manual/Issue-1357-fix/main.j rename to Tests/Manual/CPLocalizationTest/main.j index ca820e685..c0df1910e 100644 --- a/Tests/Manual/Issue-1357-fix/main.j +++ b/Tests/Manual/CPLocalizationTest/main.j @@ -1,9 +1,9 @@ /* * AppController.j - * CPViewNoDisplayAfterHidingAndResizeBug + * CPLocalizationTest * - * Created by You on February 24, 2013. - * Copyright 2013, Your Company All rights reserved. + * Created by You on April 20, 2015. + * Copyright 2015, Your Company All rights reserved. */ @import diff --git a/Tests/Manual/CPPlatformWindow/AppController.j b/Tests/Manual/CPPlatformWindow/AppController.j index 4b89cb115..367d498bc 100644 --- a/Tests/Manual/CPPlatformWindow/AppController.j +++ b/Tests/Manual/CPPlatformWindow/AppController.j @@ -27,6 +27,23 @@ [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 { // This is called when the cib is done loading. 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/CPSplitViewDivider/AppController.j b/Tests/Manual/CPSplitViewDivider/AppController.j new file mode 100644 index 000000000..d1ac7c70c --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/AppController.j @@ -0,0 +1,47 @@ +/* + * AppController.j + * CPSplitViewDivider + * + * Created by You on January 12, 2016. + * Copyright 2016, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPSplitView splitView; + @outlet CPView viewLeft; + @outlet CPView viewRight; + @outlet CPWindow theWindow; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ +} + +- (void)awakeFromCib +{ + [theWindow setFullPlatformWindow:YES]; + [viewLeft setBackgroundColor:[CPColor grayColor]]; + [viewRight setBackgroundColor:[CPColor greenColor]]; +} + +- (@action)clickChangeButton:(id)aSender +{ + if (![viewRight superview]) + { + console.log(@"Add viewRight in splitView"); + [splitView addSubview:viewRight]; + } + else + { + console.error(@"Remove viewRight from splitView"); + [viewRight removeFromSuperview]; + } +} + + +@end diff --git a/Tests/Manual/CPSplitViewDivider/Info.plist b/Tests/Manual/CPSplitViewDivider/Info.plist new file mode 100644 index 000000000..f0c954d64 --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPSplitViewDivider + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2016, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPSplitViewDivider/Jakefile b/Tests/Manual/CPSplitViewDivider/Jakefile new file mode 100644 index 000000000..bbe9a5454 --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPSplitViewDivider + * + * Created by You on January 12, 2016. + * Copyright 2016, 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 = "CPSplitViewDivider"; + +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", "CPSplitViewDivider.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPSplitViewDivider"); + task.setIdentifier("com.yourcompany.CPSplitViewDivider"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPSplitViewDivider"); + 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("-O2"); +}); + +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, "CPSplitViewDivider.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPSplitViewDivider.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/CPSplitViewDivider/Resources/MainMenu.cib b/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.cib new file mode 100644 index 000000000..59202e3a3 --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.cib @@ -0,0 +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;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;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;55E;D;K;6;CP$UIDd;2;57E;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;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;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;57E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;57E;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;3;103E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;57E;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;2;57E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;131E;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;136E;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;137E;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;138E;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;131E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;139E;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;125E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;140E;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;133E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;141E;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;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;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;3;120E;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;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;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;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;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;149E;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;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;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;20E;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;152E;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;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;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;55E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;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;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;156E;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;157E;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;158E;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;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;160E;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;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;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;2;95E;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;2;81E;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;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;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;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;171E;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;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;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;174E;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;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;136E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;177E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;178E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;179E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;60E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;60E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;180E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;183E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;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;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;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;60E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;190E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;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;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;60E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;192E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;67E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;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;58E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;196E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;197E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;198E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;71E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;71E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;199E;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;58E;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;71E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;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;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;208E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;211E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;79E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;79E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;211E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;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;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;225E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;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;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;181E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;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;58E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;232E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;233E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;235E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;236E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;238E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;239E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;181E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;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;58E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;245E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;247E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;181E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;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;58E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;229E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;230E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;232E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;233E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;235E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;236E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;255E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;108E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;108E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;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;58E;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;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;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;58E;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;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;265E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;116E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;116E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;265E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;266E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;269E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;116E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;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;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;271E;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;116E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;122E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;272E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;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;122E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;275E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;124E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;276E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;277E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;278E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;279E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;280E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;238E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;265E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;127E;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;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;282E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;282E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;283E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;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;3;128E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;286E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;287E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;288E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;290E;K;6;$afontD;K;6;CP$UIDd;3;292E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;281E;K;11;$aalignmentD;K;6;CP$UIDd;3;232E;K;7;$aimageD;K;6;CP$UIDd;3;294E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;281E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;295E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;281E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;296E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;297E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;187E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;188E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;298E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;281E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;186E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;232E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;281E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPSplitViewK;8;$classesA;S;11;CPSplitViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;299E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;300E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;301E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;302E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;303E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;186E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;188E;K;26;CPSplitViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;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;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;131E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;304E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;131E;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;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;131E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;307E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;308E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;131E;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;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;309E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;E;E;S;8;delegateS;9;splitViewS;9;theWindowS;8;viewLeftS;9;viewRightS;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;18;clickChangeButton:S;9;AMainMenuS;11;_CPMainMenuD;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;66E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;121E;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;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;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;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;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;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;72E;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;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;96E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;107E;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;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;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;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;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;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;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;109E;D;K;6;CP$UIDd;3;110E;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;113E;D;K;6;CP$UIDd;3;114E;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;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;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;123E;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;129E;D;K;6;CP$UIDd;3;131E;E;E;S;6;normalS;6;{1, 1}S;21;{{203, 20}, {75, 25}}S;18;{{0, 0}, {75, 25}}d;2;32S;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;291E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;310E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;296E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;186E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;186E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;4;nameD;K;6;CP$UIDd;3;311E;K;12;defaultValueD;K;6;CP$UIDd;3;313E;K;5;stateD;K;6;CP$UIDd;3;314E;K;5;valueD;K;6;CP$UIDd;3;315E;E;d;1;4d;2;-1S;6;Changed;2;14S;22;{{20, 54}, {440, 286}}S;20;{{0, 0}, {440, 286}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;d;2;18S;9;splitviewS;20;{{0, 0}, {223, 286}}d;1;8S;6;CPViewS;22;{{224, 0}, {216, 286}}S;20;{{0, 0}, {216, 286}}S;13;AppControllerS;28;_CPFontSystemFacePlaceholderS;5;imageD;K;10;$classnameS;6;CPNullK;8;$classesA;S;6;CPNullS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;312E;E;S;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;291E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;316E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;317E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;188E;E;S;18;.AppleSystemUIFontd;2;13E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.xib b/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.xib new file mode 100644 index 000000000..866ffea6d --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.xib @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPSplitViewDivider/index-debug.html b/Tests/Manual/CPSplitViewDivider/index-debug.html new file mode 100644 index 000000000..8040f8aa7 --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/index-debug.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + CPSplitViewDivider + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPSplitViewDivider/index.html b/Tests/Manual/CPSplitViewDivider/index.html new file mode 100644 index 000000000..44d7516fa --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPSplitViewDivider + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPSplitViewDivider/main.j b/Tests/Manual/CPSplitViewDivider/main.j new file mode 100644 index 000000000..ac6b1c92c --- /dev/null +++ b/Tests/Manual/CPSplitViewDivider/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPSplitViewDivider + * + * Created by You on January 12, 2016. + * Copyright 2016, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Manual/CPTabViewBindings/AppController.j b/Tests/Manual/CPTabViewBindings/AppController.j new file mode 100644 index 000000000..2a8c8c81e --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/AppController.j @@ -0,0 +1,77 @@ +/* + * AppController.j + * CPTabViewBindings + * + * Created by You on February 25, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +CPLogRegister(CPLogConsole); + +var ITEM_NUMBER = 0; + +@implementation ArrayController : CPArrayController + +- (id)newObject +{ + var n = ITEM_NUMBER++; + var item = [[CPTabViewItem alloc] initWithIdentifier:@"Item" + n]; + [item setLabel:@"Item " + n]; + var view = [[CPView alloc] initWithFrame:CGRectMake(0,0,100,100)]; + [view setBackgroundColor:[CPColor randomColor]]; + [item setView:view]; + + return item; +} + +@end + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + @outlet CPTabView tabView; + @outlet ArrayController arrayController; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (void)awakeFromCib +{ + // 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. + + [tabView bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil]; + [tabView bind:CPSelectionIndexesBinding toObject:arrayController withKeyPath:@"selectionIndexes" options:nil]; + [tabView bind:CPSelectedIndexBinding toObject:arrayController withKeyPath:@"selectedIndex" options:nil]; + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullPlatformWindow:YES]; +} + +- (@action)preserveSelection:(id)sender +{ + [arrayController setPreservesSelection:[sender state]]; +} + +- (@action)avoidsEmpty:(id)sender +{ + [arrayController setAvoidsEmptySelection:[sender state]]; +} + +- (@action)selectsInserted:(id)sender +{ + [arrayController setSelectsInsertedObjects:[sender state]]; +} + +- (@action)usesMultipleValuesMarker:(id)sender +{ + [arrayController setAlwaysUsesMultipleValuesMarker:[sender state]]; +} + +@end diff --git a/Tests/Manual/CPTabViewBindings/Info.plist b/Tests/Manual/CPTabViewBindings/Info.plist new file mode 100644 index 000000000..7cf056cf4 --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPTabViewBindings + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2015, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPTabViewBindings/Jakefile b/Tests/Manual/CPTabViewBindings/Jakefile new file mode 100644 index 000000000..aa6cc29d1 --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPTabViewBindings + * + * Created by You on February 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 = "CPTabViewBindings"; + +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", "CPTabViewBindings.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPTabViewBindings"); + task.setIdentifier("com.yourcompany.CPTabViewBindings"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPTabViewBindings"); + 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, "CPTabViewBindings.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPTabViewBindings.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/CPTabViewBindings/Resources/MainMenu.cib b/Tests/Manual/CPTabViewBindings/Resources/MainMenu.cib new file mode 100644 index 000000000..f2e54cdc3 --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/Resources/MainMenu.cib @@ -0,0 +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;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;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;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;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;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;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;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;1;0E;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;2;72E;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;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;59E;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;65E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;11E;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;73E;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;74E;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;70E;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;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;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;70E;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;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;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;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;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;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;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;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;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;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;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;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;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;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;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;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;87E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;88E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;87E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;92E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;95E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;96E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;98E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;99E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;99E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;73E;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;3;101E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;102E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;103E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;104E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;105E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;106E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;107E;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;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;114E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;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;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;119E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;120E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;40E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;121E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;51E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;50E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;122E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;122E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;122E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;122E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;123E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;123E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;123E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;124E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;125E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;108E;E;D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;127E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;128E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;132E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;42E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;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;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;127E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;127E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;133E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;12;$agrid-colorD;K;6;CP$UIDd;3;134E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;137E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;138E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;108E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;136E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;123E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;123E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;123E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;123E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;123E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;139E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;134E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;108E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;113E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;141E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;53E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;K;35;CPTableViewArchivedReusableViewsKeyD;K;6;CP$UIDd;3;142E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;143E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;144E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;145E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;146E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;148E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;149E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;150E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;113E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;123E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;15;CPTableCellViewK;8;$classesA;S;15;CPTableCellViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;151E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;152E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;153E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;154E;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;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;155E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;157E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;159E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;136E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;162E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;113E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;113E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;113E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;165E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;136E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;113E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;113E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;49E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;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;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;168E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;170E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;171E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;172E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;38E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;113E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;174E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;49E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;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;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;168E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;170E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;171E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;177E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;38E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;178E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;123E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;174E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;52E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;121E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;179E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;179E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;180E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;181E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;42E;E;D;K;10;$classnameS;9;CPTabViewK;8;$classesA;S;9;CPTabViewS;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;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;184E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;3;185E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;57E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;3;108E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;3;161E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTabViewItemK;8;$classesA;S;13;CPTabViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;186E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;187E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;58E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;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;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;188E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;189E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;191E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;192E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;60E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;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;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;188E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;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;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;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;194E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;195E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;196E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;197E;K;6;$afontD;K;6;CP$UIDd;3;198E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;125E;K;7;$aimageD;K;6;CP$UIDd;3;200E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;201E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;202E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;203E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;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;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;204E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;196E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;197E;K;6;$afontD;K;6;CP$UIDd;3;206E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;125E;K;7;$aimageD;K;6;CP$UIDd;3;207E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;208E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;202E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;203E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;2;64E;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;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;209E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;213E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;174E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;214E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;64E;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;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;215E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;216E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;174E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;217E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;64E;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;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;218E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;219E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;174E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;220E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;64E;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;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;221E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;159E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;222E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;223E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;47E;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;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;224E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;225E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;226E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;125E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;227E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;202E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;228E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;125E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;229E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;113E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;113E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;230E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;231E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;123E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;123E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;123E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;123E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;123E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;123E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;123E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;113E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;113E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;232E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;233E;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;15;arrayControllerS;7;tabViewS;9;theWindowS;9;textFieldS;4;add:S;7;remove:S;18;preserveSelection:S;16;selectsInserted:S;12;avoidsEmpty:S;25;usesMultipleValuesMarker:S;22;value: selection.labelS;5;valueS;15;selection.labelD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;24;value: objectValue.labelS;17;objectValue.labelD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;24;content: arrangedObjectsS;7;contentS;15;arrangedObjectsD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;34;selectionIndexes: selectionIndexesS;16;selectionIndexesD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 388}, {813, 249}}S;22;{{0, 0}, {1680, 1027}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {813, 249}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;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;E;E;S;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{20, 20}, {108, 185}}S;20;{{0, 0}, {108, 185}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;124E;E;E;d;2;36S;10;scrollviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;234E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;236E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;168E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;237E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;53E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;239E;E;d;1;2S;20;{{1, 1}, {106, 167}}S;20;{{0, 0}, {106, 167}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;d;2;18D;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;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;242E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;1;4d;2;31S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;243E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;243E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;244E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;K;32;AutomaticTableColumnIdentifier.0D;K;6;CP$UIDd;3;247E;E;E;S;32;AutomaticTableColumnIdentifier.0d;3;103d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;147E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;248E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;249E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;6;$afontD;K;6;CP$UIDd;3;250E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;251E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;252E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;254E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;136E;K;11;$aalignmentD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;255E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;256E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;257E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;113E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;131E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;136E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;108E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;113E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;113E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;d;1;3S;19;{{1, 1}, {103, 31}}S;19;{{0, 0}, {103, 31}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;18;{{2, 0}, {99, 17}}S;18;{{0, 0}, {99, 17}}d;2;34S;9;textfieldS;18;controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;258E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;259E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;15;Table View Celld;2;-1D;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;260E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;S;20;{{1, 51}, {223, 15}}S;19;{{0, 0}, {223, 15}}d;1;8d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;_horizontalScrollerDidScroll:d;1;1S;22;{{224, 66}, {15, 102}}S;19;{{0, 0}, {15, 102}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;_verticalScrollerDidScroll:S;19;{{0, 0}, {106, 25}}S;14;tableHeaderRowD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{129, 14}, {450, 200}}S;20;{{0, 0}, {450, 200}}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;57E;D;K;6;CP$UIDd;2;59E;E;E;S;1;1S;3;TabS;22;{{10, 33}, {430, 154}}S;20;{{0, 0}, {430, 154}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;1;2S;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{102, 208}, {26, 25}}S;18;{{0, 0}, {26, 25}}S;6;buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;261E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;262E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;263E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;264E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;0;d;2;14S;21;{{72, 208}, {24, 25}}S;18;{{0, 0}, {24, 25}}D;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;258E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;266E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;263E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;267E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{590, 17}, {214, 21}}S;19;{{0, 0}, {214, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;19;Preserves SelectionS;22;{{590, 72}, {214, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;Avoids Empty SelectionS;22;{{590, 44}, {214, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;24;Selects Inserted ObjectsS;23;{{590, 103}, {214, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;Uses Mutliple Values MarkerS;23;{{591, 131}, {207, 22}}S;19;{{0, 0}, {207, 22}}S;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;S;23;Tab View Item SelectionS;13;AppControllerS;13;CPTabViewItemS;15;ArrayControllerS;17;CPArrayControllerS;21;{{1, 168}, {106, 17}}S;19;{{0, 0}, {106, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;S;16;{{0, 0}, {0, 0}}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;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;174E;E;E;S;18;{{0, 0}, {14, 25}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;5;CPCibK;8;$classesA;S;5;CPCibS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;246E;K;16;CPCibDataFileKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;273E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;258E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;274E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;LabelsD;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;275E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;276E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;E;S;41;controlSizeRegular+editable+tableDataViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;Text Celld;4;3072S;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;277E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;174E;E;E;S;5;Ariald;1;9S;7;CPImageS;13;CPAddTemplateD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;202E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;202E;K;4;sizeD;K;6;CP$UIDd;3;279E;E;E;d;2;16S;16;CPRemoveTemplateD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;202E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;202E;K;4;sizeD;K;6;CP$UIDd;3;280E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;E;E;f;3;0.8S;8716;MjgwTlBMSVNUOzEuMDtEO0s7NDskdG9wRDtLOzE4O0NQQ2liT2JqZWN0RGF0YUtleUQ7Szs2O0NQJFVJRGQ7MTsyRTtFO0s7ODskb2JqZWN0c0E7Uzs1OyRudWxsRDtLOzEwOyRjbGFzc25hbWVTOzE2O19DUENpYk9iamVjdERhdGFLOzg7JGNsYXNzZXNBO1M7MTY7X0NQQ2liT2JqZWN0RGF0YVM7ODtDUE9iamVjdEU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzE7MUU7SzsyODtfQ1BDaWJPYmplY3REYXRhTmFtZXNLZXlzS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MzA7X0NQQ2liT2JqZWN0RGF0YU5hbWVzVmFsdWVzS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MzA7X0NQQ2liT2JqZWN0RGF0YUNsYXNzZXNLZXlzS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MzI7X0NQQ2liT2JqZWN0RGF0YUNsYXNzZXNWYWx1ZXNLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzszMDtfQ1BDaWJPYmplY3REYXRhQ29ubmVjdGlvbnNLZXlEO0s7NjtDUCRVSURkOzE7NEU7SzsyODtfQ1BDaWJPYmplY3REYXRhRnJhbWV3b3JrS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MjY7X0NQQ2liT2JqZWN0RGF0YU5leHRPaWRLZXlEO0s7NjtDUCRVSURkOzE7NUU7SzszMDtfQ1BDaWJPYmplY3REYXRhT2JqZWN0c0tleXNLZXlEO0s7NjtDUCRVSURkOzE7NkU7SzszMjtfQ1BDaWJPYmplY3REYXRhT2JqZWN0c1ZhbHVlc0tleUQ7Szs2O0NQJFVJRGQ7MTs3RTtLOzI2O19DUENpYk9iamVjdERhdGFPaWRLZXlzS2V5RDtLOzY7Q1AkVUlEZDsxOzhFO0s7Mjg7X0NQQ2liT2JqZWN0RGF0YU9pZFZhbHVlc0tleUQ7Szs2O0NQJFVJRGQ7MTs5RTtLOzI4O19DUENpYk9iamVjdERhdGFGaWxlT3duZXJLZXlEO0s7NjtDUCRVSURkOzI7MTFFO0s7MzM7X0NQQ2liT2JqZWN0RGF0YVZpc2libGVXaW5kb3dzS2V5RDtLOzY7Q1AkVUlEZDsyOzEzRTtFO0Q7SzsxMDskY2xhc3NuYW1lUzs3O0NQQXJyYXlLOzg7JGNsYXNzZXNBO1M7NztDUEFycmF5Uzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7MjsxNUU7RDtLOzY7Q1AkVUlEZDsyOzE3RTtFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7MjsxOUU7RDtLOzY7Q1AkVUlEZDsyOzIxRTtEO0s7NjtDUCRVSURkOzE7MEU7RDtLOzY7Q1AkVUlEZDsyOzIyRTtFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RDtLOzY7Q1AkVUlEZDsyOzExRTtEO0s7NjtDUCRVSURkOzI7MTlFO0Q7Szs2O0NQJFVJRGQ7MjsyMUU7RDtLOzY7Q1AkVUlEZDsyOzExRTtFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0U7RTtEO0s7MTA7JGNsYXNzbmFtZVM7MTg7X0NQQ2liQ3VzdG9tT2JqZWN0Szs4OyRjbGFzc2VzQTtTOzE4O19DUENpYkN1c3RvbU9iamVjdFM7ODtDUE9iamVjdEU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzI7MTBFO0s7Mjc7X0NQQ2liQ3VzdG9tT2JqZWN0Q2xhc3NOYW1lRDtLOzY7Q1AkVUlEZDsyOzIzRTtFO0Q7SzsxMDskY2xhc3NuYW1lUzs1O0NQU2V0Szs4OyRjbGFzc2VzQTtTOzU7Q1BTZXRTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzEyRTtLOzE1O0NQU2V0T2JqZWN0c0tleUQ7Szs2O0NQJFVJRGQ7MjsyNEU7RTtEO0s7MTA7JGNsYXNzbmFtZVM7MjA7Q1BDaWJPdXRsZXRDb25uZWN0b3JLOzg7JGNsYXNzZXNBO1M7MjA7Q1BDaWJPdXRsZXRDb25uZWN0b3JTOzE0O0NQQ2liQ29ubmVjdG9yUzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MjsxNEU7SzsyNDtfQ1BDaWJDb25uZWN0b3JTb3VyY2VLZXlEO0s7NjtDUCRVSURkOzI7MTlFO0s7Mjk7X0NQQ2liQ29ubmVjdG9yRGVzdGluYXRpb25LZXlEO0s7NjtDUCRVSURkOzI7MjFFO0s7MjM7X0NQQ2liQ29ubmVjdG9yTGFiZWxLZXlEO0s7NjtDUCRVSURkOzI7MjVFO0U7RDtLOzEwOyRjbGFzc25hbWVTOzIxO0NQQ2liQmluZGluZ0Nvbm5lY3Rvcks7ODskY2xhc3Nlc0E7UzsyMTtDUENpYkJpbmRpbmdDb25uZWN0b3JTOzE0O0NQQ2liQ29ubmVjdG9yUzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MjsxNkU7SzsyNDtfQ1BDaWJDb25uZWN0b3JTb3VyY2VLZXlEO0s7NjtDUCRVSURkOzI7MjFFO0s7Mjk7X0NQQ2liQ29ubmVjdG9yRGVzdGluYXRpb25LZXlEO0s7NjtDUCRVSURkOzI7MTlFO0s7MjM7X0NQQ2liQ29ubmVjdG9yTGFiZWxLZXlEO0s7NjtDUCRVSURkOzI7MjZFO0s7MzE7Q1BDaWJCaW5kaW5nQ29ubmVjdG9yQmluZGluZ0tleUQ7Szs2O0NQJFVJRGQ7MjsyN0U7SzszMTtDUENpYkJpbmRpbmdDb25uZWN0b3JLZXlQYXRoS2V5RDtLOzY7Q1AkVUlEZDsyOzI4RTtLOzMxO0NQQ2liQmluZGluZ0Nvbm5lY3Rvck9wdGlvbnNLZXlEO0s7NjtDUCRVSURkOzI7MzBFO0U7RDtLOzEwOyRjbGFzc25hbWVTOzE1O0NQVGFibGVDZWxsVmlld0s7ODskY2xhc3Nlc0E7UzsxNTtDUFRhYmxlQ2VsbFZpZXdTOzY7Q1BWaWV3UzsxMTtDUFJlc3BvbmRlclM7ODtDUE9iamVjdEU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzI7MThFO0s7MTg7Q1BSZXNwb25kZXJNZW51S2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MTI7Q1BWaWV3VGFnS2V5RDtLOzY7Q1AkVUlEZDsyOzMxRTtLOzE0O0NQVmlld0ZyYW1lS2V5RDtLOzY7Q1AkVUlEZDsyOzMyRTtLOzE1O0NQVmlld0JvdW5kc0tleUQ7Szs2O0NQJFVJRGQ7MjszM0U7SzsxNztDUFZpZXdTdWJ2aWV3c0tleUQ7Szs2O0NQJFVJRGQ7MjszNEU7SzsyMjtDUFZpZXdBdXRvcmVzaXppbmdNYXNrRDtLOzY7Q1AkVUlEZDsyOzM1RTtLOzE5O0NQVmlld1RoZW1lQ2xhc3NLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzsxOTtDUFZpZXdUaGVtZVN0YXRlS2V5RDtLOzY7Q1AkVUlEZDsyOzM2RTtLOzIwO0NQUmV1c2VJZGVudGlmaWVyS2V5RDtLOzY7Q1AkVUlEZDsyOzM3RTtLOzE0O0NQVmlld1NjYWxlS2V5RDtLOzY7Q1AkVUlEZDsyOzM4RTtLOzE4O0NQVmlld1NpemVTY2FsZUtleUQ7Szs2O0NQJFVJRGQ7MjszOEU7SzsxNztDUFZpZXdJc1NjYWxlZEtleUQ7Szs2O0NQJFVJRGQ7MjszOUU7SzsxOTtDUFZpZXdBcHBlYXJhbmNlS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MjI7Q1BWaWV3VHJhY2tpbmdBcmVhc0tleUQ7Szs2O0NQJFVJRGQ7Mjs0MEU7RTtEO0s7MTA7JGNsYXNzbmFtZVM7MTE7Q1BUZXh0RmllbGRLOzg7JGNsYXNzZXNBO1M7MTE7Q1BUZXh0RmllbGRTOzk7Q1BDb250cm9sUzs2O0NQVmlld1M7MTE7Q1BSZXNwb25kZXJTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzIwRTtLOzI3O0NQUmVzcG9uZGVyTmV4dFJlc3BvbmRlcktleUQ7Szs2O0NQJFVJRGQ7MjsxOUU7SzsxODtDUFJlc3BvbmRlck1lbnVLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzsxMjtDUFZpZXdUYWdLZXlEO0s7NjtDUCRVSURkOzI7MzFFO0s7MTQ7Q1BWaWV3RnJhbWVLZXlEO0s7NjtDUCRVSURkOzI7NDFFO0s7MTU7Q1BWaWV3Qm91bmRzS2V5RDtLOzY7Q1AkVUlEZDsyOzQyRTtLOzE4O0NQVmlld1N1cGVydmlld0tleUQ7Szs2O0NQJFVJRGQ7MjsxOUU7SzsyMjtDUFZpZXdBdXRvcmVzaXppbmdNYXNrRDtLOzY7Q1AkVUlEZDsyOzQzRTtLOzE5O0NQVmlld1RoZW1lQ2xhc3NLZXlEO0s7NjtDUCRVSURkOzI7NDRFO0s7MTk7Q1BWaWV3VGhlbWVTdGF0ZUtleUQ7Szs2O0NQJFVJRGQ7Mjs0NUU7Szs2OyRhZm9udEQ7Szs2O0NQJFVJRGQ7Mjs0N0U7SzsxNzskYWxpbmUtYnJlYWstbW9kZUQ7Szs2O0NQJFVJRGQ7Mjs0OEU7SzsxMTskYWFsaWdubWVudEQ7Szs2O0NQJFVJRGQ7Mjs0OEU7SzsxNDtDUFZpZXdTY2FsZUtleUQ7Szs2O0NQJFVJRGQ7MjszOEU7SzsxODtDUFZpZXdTaXplU2NhbGVLZXlEO0s7NjtDUCRVSURkOzI7MzhFO0s7MTc7Q1BWaWV3SXNTY2FsZWRLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MTk7Q1BWaWV3QXBwZWFyYW5jZUtleUQ7Szs2O0NQJFVJRGQ7MTswRTtLOzIyO0NQVmlld1RyYWNraW5nQXJlYXNLZXlEO0s7NjtDUCRVSURkOzI7NDlFO0s7MzU7Q1BDb250cm9sU2VuZHNBY3Rpb25PbkVuZEVkaXRpbmdLZXlEO0s7NjtDUCRVSURkOzI7NTBFO0s7MTc7Q1BDb250cm9sVmFsdWVLZXlEO0s7NjtDUCRVSURkOzI7NTFFO0s7MjQ7Q1BDb250cm9sU2VuZEFjdGlvbk9uS2V5RDtLOzY7Q1AkVUlEZDsyOzQ4RTtLOzIzO0NQQ29udHJvbENvbnRyb2xTaXplS2V5RDtLOzY7Q1AkVUlEZDsyOzMxRTtLOzMzO0NQQ29udHJvbEJhc2VXcml0dGluZ0RpcmVjdGlvbktleUQ7Szs2O0NQJFVJRGQ7Mjs1MkU7SzsyNDtDUFRleHRGaWVsZElzRWRpdGFibGVLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MjY7Q1BUZXh0RmllbGRJc1NlbGVjdGFibGVLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7Mjk7Q1BUZXh0RmllbGREcmF3c0JhY2tncm91bmRLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7Mjk7Q1BUZXh0RmllbGRCYWNrZ3JvdW5kQ29sb3JLZXlEO0s7NjtDUCRVSURkOzI7NTRFO0s7Mjc7Q1BUZXh0RmllbGRMaW5lQnJlYWtNb2RlS2V5RDtLOzY7Q1AkVUlEZDsyOzQ4RTtLOzIzO0NQVGV4dEZpZWxkQWxpZ25tZW50S2V5RDtLOzY7Q1AkVUlEZDsyOzQ4RTtLOzMxO0NQVGV4dEZpZWxkUGxhY2Vob2xkZXJTdHJpbmdLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzsyOTtDUFRleHRGaWVsZFVzZXNTaW5nbGVMaW5lTW9kZUQ7Szs2O0NQJFVJRGQ7MjszOUU7SzsxNjtDUFRleHRGaWVsZFdyYXBzRDtLOzY7Q1AkVUlEZDsyOzM5RTtLOzE4O0NQVGV4dEZpZWxkU2Nyb2xsc0Q7Szs2O0NQJFVJRGQ7MjszOUU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzI7MTBFO0s7Mjc7X0NQQ2liQ3VzdG9tT2JqZWN0Q2xhc3NOYW1lRDtLOzY7Q1AkVUlEZDsyOzU1RTtFO1M7ODtDUE9iamVjdEQ7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0U7RTtTOzk7dGV4dEZpZWxkUzsyNDt2YWx1ZTogb2JqZWN0VmFsdWUubGFiZWxTOzU7dmFsdWVTOzE3O29iamVjdFZhbHVlLmxhYmVsRDtLOzEwOyRjbGFzc25hbWVTOzEyO0NQRGljdGlvbmFyeUs7ODskY2xhc3Nlc0E7UzsxMjtDUERpY3Rpb25hcnlTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzI5RTtLOzEwO0NQLm9iamVjdHNEO0U7RTtkOzE7MFM7MTk7e3sxLCAxfSwgezEwMywgMzF9fVM7MTk7e3swLCAwfSwgezEwMywgMzF9fUQ7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7MjsyMUU7RTtFO2Q7MjsxOFM7Njtub3JtYWxTOzMyO0F1dG9tYXRpY1RhYmxlQ29sdW1uSWRlbnRpZmllci4wUzs2O3sxLCAxfUY7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RTtFO1M7MTg7e3syLCAwfSwgezk5LCAxN319UzsxODt7ezAsIDB9LCB7OTksIDE3fX1kOzI7MzRTOzk7dGV4dGZpZWxkUzsxODtjb250cm9sU2l6ZVJlZ3VsYXJEO0s7MTA7JGNsYXNzbmFtZVM7NjtDUEZvbnRLOzg7JGNsYXNzZXNBO1M7NjtDUEZvbnRTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzQ2RTtLOzEzO0NQRm9udE5hbWVLZXlEO0s7NjtDUCRVSURkOzI7NTZFO0s7MTM7Q1BGb250U2l6ZUtleUQ7Szs2O0NQJFVJRGQ7Mjs1N0U7SzsxNTtDUEZvbnRJc0JvbGRLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MTc7Q1BGb250SXNJdGFsaWNLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MTc7Q1BGb250SXNTeXN0ZW1LZXlEO0s7NjtDUCRVSURkOzI7MzlFO0U7ZDsxOzREO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzE7M0U7SzsxMDtDUC5vYmplY3RzQTtFO0U7VDtTOzE1O1RhYmxlIFZpZXcgQ2VsbGQ7MjstMUQ7SzsxMDskY2xhc3NuYW1lUzs3O0NQQ29sb3JLOzg7JGNsYXNzZXNBO1M7NztDUENvbG9yUzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7Mjs1M0U7SzsyMDtDUENvbG9yQ29tcG9uZW50c0tleUQ7Szs2O0NQJFVJRGQ7Mjs1OEU7SzsxOTtDUFZpZXdUaGVtZUNsYXNzS2V5RDtLOzY7Q1AkVUlEZDsyOzU5RTtLOzE5O0NQVmlld1RoZW1lU3RhdGVLZXlEO0s7NjtDUCRVSURkOzI7MzZFO0U7UzsxMztDUEFwcGxpY2F0aW9uUzsyOTsuSGVsdmV0aWNhIE5ldWUgRGVza0ludGVyZmFjZWQ7MjsxM0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7Mjs2MEU7RDtLOzY7Q1AkVUlEZDsyOzYwRTtEO0s7NjtDUCRVSURkOzI7NjBFO0Q7Szs2O0NQJFVJRGQ7Mjs2MUU7RTtFO1M7NTtjb2xvcmY7MTg7MC42ODYyNzQ1MDk4MDM5MjE2ZDsxOzFFO0s7OTskYXJjaGl2ZXJTOzE1O0NQS2V5ZWRBcmNoaXZlcks7ODskdmVyc2lvblM7NjsxMDAwMDBFOw==D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;272E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;148E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;281E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;282E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;148E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;283E;E;d;2;11S;28;_CPFontSystemFacePlaceholderd;2;12f;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;278E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;284E;E;S;18;{{5, 0}, {-10, 0}}S;18;{{0, 0}, {-10, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{"width":0,"height":0}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTabViewBindings/Resources/MainMenu.xib b/Tests/Manual/CPTabViewBindings/Resources/MainMenu.xib new file mode 100644 index 000000000..3d3c97519 --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/Resources/MainMenu.xib @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPTabViewBindings/index-debug.html b/Tests/Manual/CPTabViewBindings/index-debug.html new file mode 100644 index 000000000..d167acc92 --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPTabViewBindings + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTabViewBindings/index.html b/Tests/Manual/CPTabViewBindings/index.html new file mode 100644 index 000000000..65e579ad1 --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPTabViewBindings + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTabViewBindings/main.j b/Tests/Manual/CPTabViewBindings/main.j new file mode 100644 index 000000000..4cfee11cb --- /dev/null +++ b/Tests/Manual/CPTabViewBindings/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPTabViewBindings + * + * Created by You on February 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/CPTabViewNib/AppController.j b/Tests/Manual/CPTabViewNib/AppController.j index 1cda4e413..c88a47d07 100644 --- a/Tests/Manual/CPTabViewNib/AppController.j +++ b/Tests/Manual/CPTabViewNib/AppController.j @@ -5,46 +5,88 @@ * Created by Alexander Ljungberg on November 5, 2010. * Copyright 2010, WireLoad, LLC All rights reserved. */ - +@import @import +CPLogRegister(CPLogConsole); + @implementation AppController : CPObject { CPWindow theWindow; //this "outlet" is connected automatically by the Cib @outlet CPTabView nibTabView; @outlet CPTabView nibTabViewEmpty; + @outlet CPViewController viewController; + @outlet CPStepper insertStepper; + @outlet CPStepper removeStepper; + @outlet CPButton fromViewController; +} + +- (IBAction)insertTabViewItem:(id)sender +{ + var idx = [insertStepper intValue], + item; + + if ([fromViewController state]) + item = [CPTabViewItem tabViewItemWithViewController:viewController]; + else + { + item = [[CPTabViewItem alloc] initWithIdentifier:@"Insert" + idx]; + var view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + [view setBackgroundColor:[CPColor randomColor]]; + [item setView:view]; + [item setLabel:@"Insert" + idx]; + } + + [nibTabView insertTabViewItem:item atIndex:idx]; +} + +- (IBAction)removeTabViewItem:(id)sender +{ + var idx = [removeStepper intValue], + item = [nibTabView tabViewItemAtIndex:idx]; + + [nibTabView removeTabViewItem:item]; } - (IBAction)changeView:(id)sender { - var item = [nibTabView selectedTabViewItem], - view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; - - [view setBackgroundColor:[CPColor redColor]]; + var item = [nibTabView selectedTabViewItem]; + var view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + [view setBackgroundColor:[CPColor randomColor]]; [item setView:view]; } - (void)awakeFromCib { - var item = [[CPTabViewItem alloc] initWithIdentifier:@"item"], - view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; - - [item setView:view]; - [item setLabel:@"item"]; - - [nibTabViewEmpty addTabViewItem:item]; - [theWindow setFullPlatformWindow:YES]; +/* + var item = [[CPTabViewItem alloc] initWithIdentifier:@"item"]; + [item setLabel:@"item"]; + [nibTabViewEmpty addTabViewItem:item]; +*/ +} + +- (BOOL)tabView:(CPTabView)aTabView shouldSelectTabViewItem:(CPTabViewItem)tabViewItem +{ + var result = ([tabViewItem identifier] != @"unselectable"); + CPLog.debug(_cmd + [tabViewItem label] + " =" + result); + + return result; +} + +- (void)tabView:(CPTabView)tabView willSelectTabViewItem:(CPTabViewItem)tabViewItem +{ + CPLog.debug(_cmd + [tabViewItem label]); } - (void)tabView:(CPTabView)aTabView didSelectTabViewItem:(CPTabViewItem)tabViewItem { - CPLogConsole(_cmd + [tabViewItem label]); + CPLog.debug(_cmd + [tabViewItem label]); } -- (void)tabView:(CPTabView)aTabView shouldSelectTabViewItem:(CPTabViewItem)tabViewItem +- (void)tabViewDidChangeNumberOfTabViewItems:(CPTabView)tabView { - return [tabViewItem identifier] != @"unselectable"; + CPLog.debug(_cmd + [tabView numberOfTabViewItems]); } @end diff --git a/Tests/Manual/CPTabViewNib/Resources/MainMenu.cib b/Tests/Manual/CPTabViewNib/Resources/MainMenu.cib index f275954fa..83fa94ca4 100644 --- a/Tests/Manual/CPTabViewNib/Resources/MainMenu.cib +++ b/Tests/Manual/CPTabViewNib/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;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;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;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;2;36E;D;K;6;CP$UIDd;2;37E;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;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;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;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;27E;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;39E;D;K;6;CP$UIDd;2;34E;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;34E;D;K;6;CP$UIDd;2;43E;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;46E;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;47E;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;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;29E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;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;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;46E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;53E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;54E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;55E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;56E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;57E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;58E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;59E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;27E;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;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;61E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;10;$classnameS;9;CPTabViewK;8;$classesA;S;9;CPTabViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;65E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;66E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;2;68E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;60E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;2;70E;K;20;CPTabViewDelegateKeyD;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;71E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;72E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;70E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;78E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;80E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;80E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;80E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;82E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;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;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;84E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;6;$afontD;K;6;CP$UIDd;2;87E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;60E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;60E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;76E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;88E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;89E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;80E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;90E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;60E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;77E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;75E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;60E;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;91E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;66E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;2;94E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;43E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;60E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;2;70E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTabViewItemK;8;$classesA;S;13;CPTabViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;2;95E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;2;96E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;37E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;60E;K;11;$aalignmentD;K;6;CP$UIDd;2;60E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;76E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;2;60E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;106E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;2;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;107E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;108E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;41E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;110E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;111E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;41E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;2;70E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;77E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;113E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;114E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;44E;K;23;CPTabViewItemAuxViewKeyD;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;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;116E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;117E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;E;E;S;8;delegateS;10;nibTabViewS;15;nibTabViewEmptyS;20;takeDoubleValueFrom:S;11;changeView:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{110, 71}, {950, 390}}S;22;{{0, 0}, {1680, 1028}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {950, 390}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;E;E;d;2;18S;6;normalS;22;{{478, 6}, {454, 344}}S;20;{{0, 0}, {454, 344}}d;2;51D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;118E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;119E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;77E;E;S;23;{{597, 359}, {216, 17}}S;19;{{0, 0}, {216, 17}}d;2;13S;9;textfieldd;1;2d;1;4T;S;33;A Tab View Item Sould be Selectedd;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;81E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;120E;E;S;23;{{159, 355}, {162, 25}}S;19;{{0, 0}, {162, 25}}S;6;buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;69E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;118E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;119E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;77E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;77E;E;S;20;Replace Current ViewS;0;d;2;14S;21;{{13, 6}, {454, 344}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;d;2;54D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;40E;E;E;S;1;1S;3;TabS;22;{{10, 33}, {434, 298}}S;20;{{0, 0}, {434, 298}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;E;E;S;21;{{166, 34}, {92, 21}}S;18;{{0, 0}, {92, 21}}d;2;45S;6;sliderD;K;6;$classD;K;6;CP$UIDd;2;69E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;121E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;80E;E;d;2;50d;3;100S;12;unselectableS;14;Not SelectableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;22;{{165, 26}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;28;bezeled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;2;81E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;123E;E;S;4;ViewS;22;{{10, 13}, {434, 298}}d;1;8S;13;AppControllerS;28;_CPFontSystemFacePlaceholderd;2;-1D;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;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;E;E;S;9;Helveticad;2;12D;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;125E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;125E;E;E;f;18;0.6862745098039216d;1;1E;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;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;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;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;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;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;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;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;52E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;57E;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;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;2;67E;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;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;35E;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;46E;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;46E;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;35E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;11E;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;68E;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;69E;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;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;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;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;64E;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;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;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;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;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;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;60E;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;65E;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;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;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;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;63E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;56E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;68E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;82E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;83E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;84E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;85E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;86E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;87E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;88E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;35E;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;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;90E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;91E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;10;$classnameS;9;CPTabViewK;8;$classesA;S;9;CPTabViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;96E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;97E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;2;99E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;39E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;89E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;3;101E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTabViewItemK;8;$classesA;S;13;CPTabViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;102E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;40E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;105E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;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;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;106E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;107E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;102E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;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;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;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;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;121E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;122E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;123E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;124E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;89E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;127E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;97E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;3;129E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;53E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;89E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;3;101E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;130E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;131E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;48E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;133E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;134E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;131E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;135E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;136E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;51E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;137E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;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;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;138E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;139E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;140E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;3;142E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;54E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;143E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;54E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;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;54E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;140E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;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;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;122E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;123E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;148E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;89E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;122E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;123E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;89E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;154E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;112E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;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;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;155E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;157E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;158E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;159E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;160E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;113E;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;2;61E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;161E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;162E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;163E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;16;$aimage-positionD;K;6;CP$UIDd;3;112E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;164E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;159E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;159E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;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;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;154E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;112E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;167E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;157E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;158E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;159E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;160E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;168E;E;D;K;10;$classnameS;16;CPViewControllerK;8;$classesA;S;16;CPViewControllerS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;23;CPViewControllerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPViewControllerTitleKeyD;K;6;CP$UIDd;3;169E;K;26;CPViewControllerCibNameKeyD;K;6;CP$UIDd;3;170E;K;25;CPViewControllerBundleKeyD;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;33E;E;E;S;8;delegateS;21;initialFirstResponderS;18;fromViewControllerS;13;insertStepperS;10;nibTabViewS;15;nibTabViewEmptyS;13;removeStepperS;14;viewControllerS;11;changeView:S;17;takeIntValueFrom:S;18;insertTabViewItem:S;18;removeTabViewItem:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{110, 20}, {950, 440}}S;22;{{0, 0}, {1680, 1027}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {950, 440}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;60E;D;K;6;CP$UIDd;2;62E;E;E;d;2;18S;6;normalS;6;{1, 1}F;S;23;{{478, 48}, {454, 345}}S;20;{{0, 0}, {454, 345}}d;2;51D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;E;E;D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;100E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;171E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;118E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;95E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;95E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;95E;E;S;6;Item 0S;22;{{10, 33}, {434, 299}}S;20;{{0, 0}, {434, 299}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;22;{{200, 133}, {39, 17}}S;18;{{0, 0}, {39, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;4d;1;2T;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;114E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;S;23;{{596, 409}, {218, 17}}S;19;{{0, 0}, {218, 17}}d;2;13S;33;A Tab View Item Sould be SelectedS;23;{{159, 408}, {162, 25}}S;19;{{0, 0}, {162, 25}}S;6;buttonS;27;bordered+controlSizeRegularS;20;Replace Current ViewS;0;d;2;14S;22;{{13, 48}, {454, 345}}d;2;54D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;50E;E;E;S;1;1S;3;TabD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;E;E;S;22;{{200, 133}, {22, 17}}S;18;{{0, 0}, {22, 17}}S;12;unselectableS;14;Not SelectableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;E;E;S;22;{{172, 133}, {91, 17}}S;18;{{0, 0}, {91, 17}}S;4;ViewD;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;173E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;174E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;E;E;S;22;{{200, 133}, {29, 17}}S;18;{{0, 0}, {29, 17}}S;21;{{20, 11}, {182, 25}}S;19;{{0, 0}, {182, 25}}S;25;InsertTabViewItemAtIndex:S;22;{{460, 11}, {192, 25}}S;19;{{0, 0}, {192, 25}}S;25;removeTabViewItemAtIndex:S;21;{{655, 12}, {27, 20}}S;18;{{0, 0}, {27, 20}}S;1;0S;18;{{685, 9}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperd;5;65540d;1;1d;3;100S;22;{{285, 13}, {159, 21}}S;19;{{0, 0}, {159, 21}}S;9;check-boxS;20;From View controllerS;21;{{200, 13}, {27, 19}}S;18;{{0, 0}, {27, 19}}S;19;{{226, 10}, {0, 0}}S;13;AppControllerS;15;VIEW CONTROLLERS;11;TabViewItemS;29;.Helvetica Neue DeskInterfaceD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;159E;E;E;S;7;CPImageS;13;CPAddTemplateD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;179E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;125E;K;9;frameworkD;K;6;CP$UIDd;3;125E;E;E;f;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;178E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;180E;E;S;22;{"width":0,"height":0}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib b/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib index 22f32b7e1..a7ab1ba3b 100644 --- a/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib +++ b/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib @@ -1,39 +1,37 @@ - + 1050 - 11D50 - 2166 - 1138.32 - 568.00 + 14C109 + 6751 + 1344.72 + 757.30 com.apple.InterfaceBuilder.CocoaPlugin - 2166 + 6751 - - YES - NSTabViewItem - NSView - NSWindowTemplate + + NSButton + NSButtonCell + NSCustomObject + NSStepper + NSStepperCell NSTabView - NSSliderCell + NSTabViewItem NSTextField NSTextFieldCell - NSSlider - NSButtonCell - NSButton - NSCustomObject - - - YES + NSView + NSViewController + NSWindowTemplate + + com.apple.InterfaceBuilder.CocoaPlugin - + PluginDependencyRecalculationVersion - - YES + NSApplication @@ -46,7 +44,7 @@ 15 2 - {{110, 567}, {950, 390}} + {{110, 567}, {950, 440}} 1946157056 Window NSWindow @@ -55,156 +53,211 @@ 274 - - YES + 286 - {{13, 40}, {454, 344}} + {{13, 47}, {454, 345}} - - - YES + 1 - 256 - - YES - + 274 + + - 301 - {{164, 243}, {96, 21}} + 268 + {{198, 149}, {26, 17}} + _NS:526 + {251, 750} YES - - -2080244224 - 0 - - - Helvetica - 12 - 16 - - - 100 - 0.0 - 50 - 0.0 - 0 - 1 - NO - NO - - - - {{10, 33}, {434, 298}} - - - Tab - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - - - - - 256 - {{10, 33}, {434, 298}} - - - - - View - - - - - unselectable - - - 256 - - YES - - - 301 - {{169, 246}, {96, 22}} - - YES - - -1804468671 + + 68157504 272630784 - + Tab - LucidaGrande + YES 13 1044 - - YES - + _NS:526 + + 6 System - textBackgroundColor + controlColor 3 - MQA + MC42NjY2NjY2NjY3AA - + 6 System - textColor + labelColor 3 MAA + NO + 1 - - {{10, 33}, {434, 298}} - + + {{10, 33}, {434, 299}} + + + Tab + + + + + + + 274 + + + + 268 + {{198, 149}, {33, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + View + + _NS:526 + + + + + NO + 1 + + + {{10, 33}, {434, 299}} + + + + + View + + + + NSImage + NSAddTemplate + + + + unselectable + + + 274 + + + + 268 + {{170, 149}, {95, 17}} + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Not Selectable + + _NS:526 + + + + + NO + 1 + + + {{10, 33}, {434, 299}} + Not Selectable - + 0 YES YES - - YES + - + 283 - {{478, 40}, {454, 344}} + {{478, 47}, {454, 345}} - - YES - + + + + + 274 + + + + 268 + {{198, 149}, {43, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Item 0 + + _NS:526 + + + + + NO + 1 + + + {{10, 33}, {434, 299}} + + + + + Item 0 + + + + + 0 YES YES + + + @@ -212,11 +265,10 @@ {{594, 14}, {222, 17}} - _NS:3944 YES - 68288064 + 68157504 272630784 A Tab View Item Sould be Selected @@ -230,6 +282,8 @@ + NO + 1 @@ -241,37 +295,210 @@ _NS:687 YES - 67239424 + 67108864 134217728 Replace Current View _NS:687 - -2038284033 + -2038284288 129 200 25 + NO - - {950, 390} + + + 268 + {{198, 408}, {31, 19}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 138413056 + 0 + + _NS:526 + + + + + NO + 1 + + + + 268 + {{223, 405}, {19, 27}} + + + + _NS:1592 + YES + + 786464 + 0 + _NS:1592 + + 100 + 1 + YES + + NO + + + + 268 + {{14, 401}, {194, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + InsertTabViewItemAtIndex: + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{454, 401}, {204, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + removeTabViewItemAtIndex: + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{653, 408}, {31, 20}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 138413056 + 0 + + _NS:526 + + + + + NO + 1 + + + + 268 + {{682, 406}, {19, 27}} + + + + _NS:1592 + YES + + 786464 + 0 + _NS:1592 + + 100 + 1 + YES + + NO + + + + 268 + {{286, 408}, {149, 18}} + + + + _NS:9 + YES + + 67108864 + 268435456 + From View controller + + _NS:9 + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + NO + + + {950, 440} - + - {{0, 0}, {1680, 1028}} + {{0, 0}, {1680, 1027}} {10000000000000, 10000000000000} YES AppController - + + TabViewItem + VIEW CONTROLLER + 0 + + - - YES + delegate @@ -280,6 +507,14 @@ 451 + + + initialFirstResponder + + + + 492 + changeView: @@ -305,12 +540,52 @@ 486 - - takeDoubleValueFrom: - - + + viewController + + - 458 + 494 + + + + insertStepper + + + + 513 + + + + insertTabViewItem: + + + + 514 + + + + removeTabViewItem: + + + + 523 + + + + removeStepper + + + + 524 + + + + fromViewController + + + + 527 @@ -328,152 +603,136 @@ 487 - + + + takeIntValueFrom: + + + + 512 + + + + takeIntValueFrom: + + + + 522 + + - - YES + 0 - - YES - + -2 - + File's Owner -1 - + First Responder -3 - + Application 371 - - YES + - - + + 372 - - YES + - + + + + + + + + 450 - + 460 - - YES + - + 461 - - YES + - + 462 - - YES + - + 463 - - YES - - + + + 464 - - YES - - + + + - - 452 - - - YES - - - - - - 453 - - - - - 456 - - - YES - - - - - - 457 - - - 465 - - YES - + + + 475 - - YES + - + @@ -484,10 +743,9 @@ 479 - - YES + - + @@ -498,157 +756,323 @@ 488 - - YES + - + 489 + + + - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 372.IBPluginDependency - 450.IBPluginDependency - 452.IBPluginDependency - 453.IBPluginDependency - 456.IBPluginDependency - 457.IBPluginDependency - 460.IBPluginDependency - 461.IBPluginDependency - 462.IBPluginDependency - 463.IBPluginDependency - 464.IBPluginDependency - 465.IBPluginDependency - 475.IBPluginDependency - 476.IBPluginDependency - 479.IBPluginDependency - 480.IBPluginDependency - 488.IBPluginDependency - 489.IBPluginDependency - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{209, 447}, {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 - - - - YES - - + + 490 + + + + + + + + 491 + + + + + + + + 493 + + + + + 495 + + + + + + + + 496 + + + + + 497 + + + + + + + + 498 + + + + + 499 + + + + + + + + 500 + + + + + 502 + + + + + + + + 503 + + + + + 506 + + + + + + + + 507 + + + + + 508 + + + + + + + + 509 + + + + + 510 + + + + + + + + 511 + + + + + 515 + + + + + + + + 516 + + + + + 518 + + + + + + + + 519 + + + + + + + + 520 + + + + + 521 + + + + + 525 + + + + + + + + 526 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {458, 371} + com.apple.InterfaceBuilder.CocoaPlugin + {{209, 447}, {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 + com.apple.InterfaceBuilder.CocoaPlugin + 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 - - - + - 489 + 527 - - YES + AppController NSObject - - changeView: - id - - - changeView: - + + id + id + id + + + changeView: id - - - YES - - YES - nibTabView - nibTabViewEmpty + + insertTabViewItem: + id - - YES - NSTabView - NSTabView + + removeTabViewItem: + id - - - YES - - YES - nibTabView - nibTabViewEmpty + + + NSButton + NSStepper + NSTabView + NSTabView + NSStepper + NSViewController + + + + fromViewController + NSButton - - YES - - nibTabView - NSTabView - - - nibTabViewEmpty - NSTabView - + + insertStepper + NSStepper - + + nibTabView + NSTabView + + + nibTabViewEmpty + NSTabView + + + removeStepper + NSStepper + + + viewController + NSViewController + + IBProjectSource - ./Classes/AppController.h + ../.XcodeSupport/AppController.h - + 0 IBCocoaFramework + NO com.apple.InterfaceBuilder.CocoaPlugin.macosx com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - + YES 3 + + {11, 11} + {15, 15} + diff --git a/Tests/Manual/CPTabViewNib/Resources/TabViewItem.cib b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.cib new file mode 100644 index 000000000..722b30f60 --- /dev/null +++ b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.cib @@ -0,0 +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;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;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;20E;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;18E;D;K;6;CP$UIDd;2;20E;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;21E;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;22E;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;18E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;23E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;24E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;26E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;26E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;28E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;30E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;30E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;31E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;2;32E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;2;32E;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;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;18E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;33E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;34E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;18E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;35E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;36E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;37E;K;11;$aalignmentD;K;6;CP$UIDd;2;38E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;38E;K;6;$afontD;K;6;CP$UIDd;2;40E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;30E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;30E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;31E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;41E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;42E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;43E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;25E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;31E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;31E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;31E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;45E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;38E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;38E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;31E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;31E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;41E;E;S;16;CPViewControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;viewS;13;CPApplicationd;1;0S;20;{{0, 0}, {406, 263}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;E;E;d;2;18S;6;normalS;6;{1, 1}F;S;6;CPViewS;22;{{93, 118}, {220, 22}}S;19;{{0, 0}, {220, 22}}d;2;36S;9;textfieldS;26;bezeled+controlSizeRegulard;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;46E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;47E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;31E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;31E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;31E;E;T;S;28;CPViewController TabViewItemd;1;4D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;48E;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;2;49E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;49E;E;E;d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTabViewNib/Resources/TabViewItem.xib b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.xib new file mode 100644 index 000000000..529e412f1 --- /dev/null +++ b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.xib @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/CPURLConnectionAsyncTest/AppController.j b/Tests/Manual/CPURLConnectionAsyncTest/AppController.j new file mode 100644 index 000000000..41015b003 --- /dev/null +++ b/Tests/Manual/CPURLConnectionAsyncTest/AppController.j @@ -0,0 +1,210 @@ +/* + * AppController.j + * CPURLConnectionAsyncTest + * + * Created by You on February 1, 2012. + * Copyright 2012, Your Company All rights reserved. + + This test needs to be at the root of your Web Server (http://localhost/CPURLConnectionAsyncTest/) and with php enabled. + For each test, we start 3 async connections and we setup the resulting operations to be dependant one from each other. The connection received after the smallest delay is dependant on a connection received with a longer delay. + We test that dedendant operations are perfomed before their dependencies. + We also test that in the completionHandler(response, data, error), the data and error params are mututally exclusive.*/ + +@import +@import +CPLogRegister(CPLogConsole); + +@implementation AppController : CPObject +{ + @outlet CPTextField testField; + CPWindow theWindow; //this "outlet" is connected automatically by the Cib + CPOperationQueue queue; + CPArray results; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (CPURLConnection)startAsyncConnection:(CPInteger)idx responseStatus:(CPInteger)aStatus delay:(CPInteger)aDelay isLast:(BOOL)isLast +{ + var resourcePath = [[CPBundle mainBundle] resourcePath], + url = [CPURL URLWithString:[CPString stringWithFormat:@"%@delayed.php?sleep=%@&status=%@", resourcePath, aDelay, aStatus]], + request = [CPURLRequest requestWithURL:url]; + + return [self startAsyncConnection:idx request:request isLast:isLast]; +} + +- (CPURLConnection)startAsyncConnection:(CPInteger)idx request:(CPURLRequest)request isLast:(BOOL)isLast +{ + var connection = [CPURLConnection sendAsynchronousRequest:request queue:queue completionHandler:function (response, data, error) + { + var status; + + if (error == nil) + error = [CPNull null]; + + if (data == nil) + data = [CPNull null]; + + if (response == nil) + status = -1; + else + status = [response statusCode]; + + CPLog.debug([request URL] + "\nRESPONSE:" + response + "\nDATA:" + data + "\nERROR:" + [error description]); + + [results addObject:@{"conn_id":idx, "data":data, "status":status, "error":error}]; + + // We received all the responses to the connections we launched (3). + if ([results count] == 3) + { + var test = [self testResults]; + [testField setStringValue:((test) ? "Test passed" : @"Test failed")]; + } + }]; + + return connection; +} + +- (BOOL)testResults +{ + if ([results count] !== 3) + return NO; + + // In theses tests, we send connections 1,2,3 and we expect the operations to be performed in reverse order: 3,2,1 because of the dependencies we set up. + if (![[results valueForKey:@"conn_id"] isEqualToArray:@[3,2,1]]) + return NO; + + var nul = [CPNull null]; + + for (var i = 0; i < [results count]; i++) + { + var res = [results objectAtIndex:i], + noData = [res objectForKey:@"data"] == nul, + noError = [res objectForKey:@"error"] == nul; + + if (noData == noError) + return NO; + } + + return YES; +} + +- (IBAction)test1:(id)sender +{ + results = @[]; + queue = [[CPOperationQueue alloc] init]; + [testField setStringValue:@"Waiting for response ..."]; + + var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES], + connection2 = [self startAsyncConnection:2 responseStatus:200 delay:2 isLast:NO], + connection3 = [self startAsyncConnection:3 responseStatus:200 delay:3 isLast:NO]; + + [[connection1 operation] addDependency:[connection2 operation]]; + [[connection2 operation] addDependency:[connection3 operation]]; +} + +- (IBAction)test2:(id)sender +{ + results = @[]; + queue = [[CPOperationQueue alloc] init]; + [testField setStringValue:@"Waiting for response ..."]; + + var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES], + connection2 = [self startAsyncConnection:2 responseStatus:404 delay:2 isLast:NO], + connection3 = [self startAsyncConnection:3 responseStatus:200 delay:3 isLast:NO]; + + [[connection1 operation] addDependency:[connection2 operation]]; + [[connection2 operation] addDependency:[connection3 operation]]; +} + +- (IBAction)test3:(id)sender +{ + results = @[]; + queue = [[CPOperationQueue alloc] init]; + [testField setStringValue:@"Waiting for response ..."]; + + var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES], + connection2 = [self startAsyncConnection:2 responseStatus:200 delay:2 isLast:NO], + connection3 = [self startAsyncConnection:3 responseStatus:404 delay:3 isLast:NO]; + + [[connection1 operation] addDependency:[connection2 operation]]; + [[connection2 operation] addDependency:[connection3 operation]]; +} + +- (IBAction)test4:(id)sender +{ + results = @[]; + queue = [[CPOperationQueue alloc] init]; + [testField setStringValue:@"Waiting for response ..."]; + + var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES], + connection2 = [self startAsyncConnection:2 responseStatus:403 delay:2 isLast:NO], + connection3 = [self startAsyncConnection:3 responseStatus:404 delay:3 isLast:NO]; + + [[connection1 operation] addDependency:[connection2 operation]]; + [[connection2 operation] addDependency:[connection3 operation]]; +} + +- (IBAction)test5:(id)sender +{ + results = @[]; + queue = [[CPOperationQueue alloc] init]; + [testField setStringValue:@"Waiting for response ..."]; + + var connection1 = [self startAsyncConnection:1 responseStatus:404 delay:1 isLast:YES], + connection2 = [self startAsyncConnection:2 responseStatus:1000 delay:2 isLast:NO], + connection3 = [self startAsyncConnection:3 responseStatus:404 delay:3 isLast:NO]; + + [[connection1 operation] addDependency:[connection2 operation]]; + [[connection2 operation] addDependency:[connection3 operation]]; +} + +- (IBAction)test6:(id)sender +{ + results = @[]; + queue = [[CPOperationQueue alloc] init]; + [testField setStringValue:@"Waiting for response ..."]; + + var request = [CPURLRequest requestWithURL:"dummy"], + connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES], + connection2 = [self startAsyncConnection:2 request:request isLast:NO], + connection3 = [self startAsyncConnection:3 request:request isLast:NO]; + + [[connection1 operation] addDependency:[connection2 operation]]; + [[connection2 operation] addDependency:[connection3 operation]]; +} + +- (IBAction)test7:(id)sender +{ + results = @[]; + queue = [[CPOperationQueue alloc] init]; + + var resourcePath = [[CPBundle mainBundle] resourcePath], + url = [CPURL URLWithString:[CPString stringWithFormat:@"%@delayed.php?sleep=%@&status=%@", resourcePath, 10, 200]], + timeoutrequest = [CPURLRequest requestWithURL:url cachePolicy:CPURLRequestUseProtocolCachePolicy timeoutInterval:3], + nourl = [CPURLRequest requestWithURL:@"nourl"]; + + [testField setStringValue:@"Waiting for response ..."]; + + var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES], + connection2 = [self startAsyncConnection:2 request:nourl isLast:NO], + connection3 = [self startAsyncConnection:3 request:timeoutrequest isLast:NO]; + + [[connection1 operation] addDependency:[connection2 operation]]; + [[connection2 operation] addDependency:[connection3 operation]]; +} + +- (void)awakeFromCib +{ + // 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. + + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullPlatformWindow:YES]; +} + +@end \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/Growl Registration Ticket.growlRegDict b/Tests/Manual/CPURLConnectionAsyncTest/Info.plist similarity index 51% rename from Tools/XcodeCapp/XcodeCapp/Growl Registration Ticket.growlRegDict rename to Tests/Manual/CPURLConnectionAsyncTest/Info.plist index 01a301463..8abee9439 100644 --- a/Tools/XcodeCapp/XcodeCapp/Growl Registration Ticket.growlRegDict +++ b/Tests/Manual/CPURLConnectionAsyncTest/Info.plist @@ -2,11 +2,9 @@ - TicketVersion - 1 - AllNotifications - - DefaultNotifications - - + Main cib file base name + MainMenu.cib + CPBundleName + CPURLConnectionAsyncTest + diff --git a/Tests/Manual/Issue-1357-fix/Jakefile b/Tests/Manual/CPURLConnectionAsyncTest/Jakefile similarity index 51% rename from Tests/Manual/Issue-1357-fix/Jakefile rename to Tests/Manual/CPURLConnectionAsyncTest/Jakefile index bb12b2e12..8012b7016 100644 --- a/Tests/Manual/Issue-1357-fix/Jakefile +++ b/Tests/Manual/CPURLConnectionAsyncTest/Jakefile @@ -1,9 +1,9 @@ /* * Jakefile - * CPViewNoDisplayAfterHidingAndResizeBug + * CPURLConnectionAsyncTest * - * Created by You on February 24, 2013. - * Copyright 2013, Your Company All rights reserved. + * Created by You on February 1, 2012. + * Copyright 2012, Your Company All rights reserved. */ var ENV = require("system").env, @@ -15,21 +15,22 @@ var ENV = require("system").env, configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", OS = require("os"); -app ("CPViewNoDisplayAfterHidingAndResizeBug", function(task) +app ("CPURLConnectionAsyncTest", function(task) { - task.setBuildIntermediatesPath(FILE.join("Build", "CPViewNoDisplayAfterHidingAndResizeBug.build", configuration)); + task.setBuildIntermediatesPath(FILE.join("Build", "CPURLConnectionAsyncTest.build", configuration)); task.setBuildPath(FILE.join("Build", configuration)); - task.setProductName("CPViewNoDisplayAfterHidingAndResizeBug"); - task.setIdentifier("com.yourcompany.CPViewNoDisplayAfterHidingAndResizeBug"); + task.setProductName("CPURLConnectionAsyncTest"); + task.setIdentifier("com.yourcompany.CPURLConnectionAsyncTest"); task.setVersion("1.0"); task.setAuthor("Your Company"); task.setEmail("feedback @nospam@ yourcompany.com"); - task.setSummary("CPViewNoDisplayAfterHidingAndResizeBug"); + task.setSummary("CPURLConnectionAsyncTest"); task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); task.setResources(new FileList("Resources/**")); task.setIndexFilePath("index.html"); task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); if (configuration === "Debug") task.setCompilerFlags("-DDEBUG -g"); @@ -37,7 +38,7 @@ app ("CPViewNoDisplayAfterHidingAndResizeBug", function(task) task.setCompilerFlags("-O"); }); -task ("default", ["CPViewNoDisplayAfterHidingAndResizeBug"], function() +task ("default", ["CPURLConnectionAsyncTest"], function() { printResults(configuration); }); @@ -58,36 +59,36 @@ task ("release", function() task ("run", ["debug"], function() { - OS.system(["open", FILE.join("Build", "Debug", "CPViewNoDisplayAfterHidingAndResizeBug", "index.html")]); + OS.system(["open", FILE.join("Build", "Debug", "CPURLConnectionAsyncTest", "index.html")]); }); task ("run-release", ["release"], function() { - OS.system(["open", FILE.join("Build", "Release", "CPViewNoDisplayAfterHidingAndResizeBug", "index.html")]); + OS.system(["open", FILE.join("Build", "Release", "CPURLConnectionAsyncTest", "index.html")]); }); task ("deploy", ["release"], function() { - FILE.mkdirs(FILE.join("Build", "Deployment", "CPViewNoDisplayAfterHidingAndResizeBug")); - OS.system(["press", "-f", FILE.join("Build", "Release", "CPViewNoDisplayAfterHidingAndResizeBug"), FILE.join("Build", "Deployment", "CPViewNoDisplayAfterHidingAndResizeBug")]); + FILE.mkdirs(FILE.join("Build", "Deployment", "CPURLConnectionAsyncTest")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPURLConnectionAsyncTest"), FILE.join("Build", "Deployment", "CPURLConnectionAsyncTest")]); printResults("Deployment") }); task ("desktop", ["release"], function() { - FILE.mkdirs(FILE.join("Build", "Desktop", "CPViewNoDisplayAfterHidingAndResizeBug")); - require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPViewNoDisplayAfterHidingAndResizeBug"), FILE.join("Build", "Desktop", "CPViewNoDisplayAfterHidingAndResizeBug", "CPViewNoDisplayAfterHidingAndResizeBug.app")); + FILE.mkdirs(FILE.join("Build", "Desktop", "CPURLConnectionAsyncTest")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPURLConnectionAsyncTest"), FILE.join("Build", "Desktop", "CPURLConnectionAsyncTest", "CPURLConnectionAsyncTest.app")); printResults("Desktop") }); task ("run-desktop", ["desktop"], function() { - OS.system([FILE.join("Build", "Desktop", "CPViewNoDisplayAfterHidingAndResizeBug", "CPViewNoDisplayAfterHidingAndResizeBug.app", "Contents", "MacOS", "NativeHost"), "-i"]); + OS.system([FILE.join("Build", "Desktop", "CPURLConnectionAsyncTest", "CPURLConnectionAsyncTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); }); function printResults(configuration) { print("----------------------------"); - print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPViewNoDisplayAfterHidingAndResizeBug")); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPURLConnectionAsyncTest")); print("----------------------------"); } diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.cib b/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.cib new file mode 100644 index 000000000..51021f140 --- /dev/null +++ b/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.cib @@ -0,0 +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;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;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;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;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;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;41E;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;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;40E;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;42E;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;43E;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;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;46E;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;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;42E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;54E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;55E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;56E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;57E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;58E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;59E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;60E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;30E;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;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;62E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;62E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;67E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;76E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;79E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;84E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;85E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;87E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;88E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;89E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;90E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;91E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;92E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;93E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;94E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;95E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;72E;K;6;$afontD;K;6;CP$UIDd;2;96E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;82E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;66E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;66E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;66E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;98E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;72E;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;66E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;66E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;99E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;3;100E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;101E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;102E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;3;103E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;104E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;3;106E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;107E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;108E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;8;delegateS;9;testFieldS;9;theWindowS;6;test1:S;6;test2:S;6;test3:S;6;test4:S;6;test5:S;6;test6:S;6;test7:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 171}, {934, 466}}S;22;{{0, 0}, {1680, 1027}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {934, 466}}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;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;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;E;E;S;6;normalS;6;{1, 1}F;S;20;{{23, 20}, {65, 25}}S;18;{{0, 0}, {65, 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;2;73E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;d;1;4d;2;-1S;6;Test 1S;0;d;2;14T;S;20;{{23, 53}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 2S;20;{{23, 86}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 3S;21;{{23, 119}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 4S;22;{{136, 22}, {308, 17}}S;19;{{0, 0}, {308, 17}}S;9;textfieldS;30;controlSizeRegular+placeholderD;K;6;$classD;K;6;CP$UIDd;2;73E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;82E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;114E;E;S;21;{{23, 152}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 5S;21;{{23, 185}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 6S;21;{{23, 217}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 7S;13;AppControllerS;29;.Helvetica Neue DeskInterfaced;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;2;73E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;66E;E;D;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;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;E;E;f;18;0.6862745098039216d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.xib b/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.xib new file mode 100644 index 000000000..e00e18294 --- /dev/null +++ b/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.xib @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/delayed.php b/Tests/Manual/CPURLConnectionAsyncTest/Resources/delayed.php new file mode 100755 index 000000000..b8bffe20a --- /dev/null +++ b/Tests/Manual/CPURLConnectionAsyncTest/Resources/delayed.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/spinner.gif b/Tests/Manual/CPURLConnectionAsyncTest/Resources/spinner.gif new file mode 100644 index 000000000..06dbc2bc2 Binary files /dev/null and b/Tests/Manual/CPURLConnectionAsyncTest/Resources/spinner.gif differ diff --git a/Tests/Manual/Issue-1357-fix/index-debug.html b/Tests/Manual/CPURLConnectionAsyncTest/index-debug.html similarity index 78% rename from Tests/Manual/Issue-1357-fix/index-debug.html rename to Tests/Manual/CPURLConnectionAsyncTest/index-debug.html index 636db06c8..a441ea9b2 100644 --- a/Tests/Manual/Issue-1357-fix/index-debug.html +++ b/Tests/Manual/CPURLConnectionAsyncTest/index-debug.html @@ -1,38 +1,33 @@ - - + + - + - - + - + + - - + + - - - - CPViewNoDisplayAfterHidingAndResizeBug + CPURLConnectionAsyncTest - + + + + +
+
+
+ +
+
+ +
+ + 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/CrossOriginTest/Resources/MainMenu.cib b/Tests/Manual/CrossOriginTest/Resources/MainMenu.cib new file mode 100644 index 000000000..b664cab7d --- /dev/null +++ b/Tests/Manual/CrossOriginTest/Resources/MainMenu.cib @@ -0,0 +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;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;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;56E;D;K;6;CP$UIDd;2;58E;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;123E;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;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;133E;D;K;6;CP$UIDd;1;0E;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;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;58E;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;2;77E;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;3;105E;D;K;6;CP$UIDd;2;58E;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;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;11E;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;128E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;133E;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;135E;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;136E;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;134E;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;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;133E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;131E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;126E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;140E;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;2;63E;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;19E;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;142E;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;2;11E;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;3;113E;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;3;118E;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;3;111E;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;112E;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;3;114E;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;75E;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;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;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;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;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;3;102E;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;3;103E;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;84E;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;79E;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;82E;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;97E;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;78E;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;83E;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;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;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;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;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;163E;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;164E;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;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;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;166E;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;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;123E;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;124E;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;2;99E;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;106E;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;107E;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;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;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;135E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;177E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;178E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;179E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;61E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;61E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;180E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;183E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;185E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;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;187E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;61E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;61E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;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;61E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;61E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;191E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;67E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;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;59E;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;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;197E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;199E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;185E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;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;187E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;185E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;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;187E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;200E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;74E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;74E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;14;CPMenuTitleKeyD;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;59E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;203E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;77E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;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;59E;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;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;208E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;210E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;185E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;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;187E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;212E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;214E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;77E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;216E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;185E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;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;187E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;220E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;220E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;222E;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;223E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;224E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;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;226E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;88E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;236E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;95E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;236E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;238E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;242E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;101E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;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;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;244E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;105E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;105E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;77E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;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;59E;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;234E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;235E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;231E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;232E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;223E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;105E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;224E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;110E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;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;59E;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;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;258E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;259E;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;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;262E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;263E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;116E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;116E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;263E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;264E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;116E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;185E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;186E;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;187E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;122E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;58E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;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;59E;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;122E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;273E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;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;122E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;125E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;276E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;277E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;278E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;279E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;280E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;228E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;180E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;128E;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;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;282E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;282E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;283E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;187E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;286E;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;129E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;128E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;287E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;288E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;128E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;290E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;291E;K;6;$afontD;K;6;CP$UIDd;3;293E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;281E;K;11;$aalignmentD;K;6;CP$UIDd;3;231E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;187E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;294E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;281E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;295E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;281E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;296E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;297E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;186E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;187E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;298E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;281E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;185E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;231E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;281E;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;129E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;128E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;299E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;300E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;128E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;290E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;291E;K;6;$afontD;K;6;CP$UIDd;3;293E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;281E;K;11;$aalignmentD;K;6;CP$UIDd;3;231E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;187E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;301E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;281E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;295E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;281E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;296E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;302E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;186E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;187E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;298E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;281E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;185E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;231E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;281E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;128E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;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;128E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;306E;K;16;$aimage-positionD;K;6;CP$UIDd;3;231E;K;6;$afontD;K;6;CP$UIDd;3;307E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;281E;K;11;$aalignmentD;K;6;CP$UIDd;3;295E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;187E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;234E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;295E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;281E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;296E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;309E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;186E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;187E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;234E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;234E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;185E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;231E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;281E;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;310E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;126E;E;E;S;8;delegateS;19;setsWithCredentialsS;9;theButtonS;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;18;testNativeRequest:S;22;testCappuccinoRequest:S;23;stateOfWithCredentials:S;9;AMainMenuS;11;_CPMainMenuD;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;3;109E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;73E;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;65E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;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;68E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;69E;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;75E;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;80E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;100E;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;93E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;90E;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;2;98E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;99E;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;103E;D;K;6;CP$UIDd;3;102E;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;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;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;114E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;120E;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;117E;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;123E;D;K;6;CP$UIDd;3;124E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, 427}, {480, 360}}S;22;{{0, 0}, {1920, 1177}}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;131E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;133E;E;E;S;6;normalS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{139, 169}, {203, 25}}S;19;{{0, 0}, {203, 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;292E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;311E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;296E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;185E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;187E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;1;4d;2;-1S;23;Cappuccino CPURLRequestd;2;14S;23;{{148, 136}, {185, 25}}S;19;{{0, 0}, {185, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;Native XMLHTTPRequestS;22;{{177, 69}, {134, 21}}S;19;{{0, 0}, {134, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;292E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;311E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;296E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;187E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;187E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;185E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;16;With CredentialsS;13;AppControllerS;28;_CPFontSystemFacePlaceholderE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/Issue-1357-fix/AppController.j b/Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/AppController.j similarity index 100% rename from Tests/Manual/Issue-1357-fix/AppController.j rename to Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/AppController.j diff --git a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/Info.plist b/Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/Info.plist similarity index 100% rename from Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/Info.plist rename to Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/Info.plist diff --git a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/Jakefile b/Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/Jakefile similarity index 100% rename from Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/Jakefile rename to Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/Jakefile diff --git a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/Resources/spinner.gif b/Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/Resources/spinner.gif similarity index 100% rename from Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/Resources/spinner.gif rename to Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/Resources/spinner.gif diff --git a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/index-debug.html b/Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/index-debug.html similarity index 100% rename from Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/index-debug.html rename to Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/index-debug.html diff --git a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/index.html b/Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/index.html similarity index 100% rename from Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/index.html rename to Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/index.html diff --git a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/main.j b/Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/main.j similarity index 100% rename from Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/main.j rename to Tests/Manual/FontEnhancementTest/CPViewNoDisplayAfterHidingAndResizeBug/main.j diff --git a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/AppController.j b/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/AppController.j deleted file mode 100644 index e54f1bf3b..000000000 --- a/Tests/Manual/Issue-1357-fix/CPViewNoDisplayAfterHidingAndResizeBug/AppController.j +++ /dev/null @@ -1,63 +0,0 @@ -/* - * AppController.j - * CPViewNoDisplayAfterHidingAndResizeBug - * - * Created by You on February 24, 2013. - * Copyright 2013, Your Company All rights reserved. - */ - -@import - - -@implementation AppController : CPObject -{ - CPView view; -} - -- (void)applicationDidFinishLaunching:(CPNotification)aNotification -{ - var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(100,100,700,400) styleMask:CPResizableWindowMask], - contentView = [theWindow contentView]; - - var button = [[CPButton alloc] initWithFrame:CGRectMake(10, 10, 200, 28)]; - [button setTitle:@"Hide"]; - [button setAlternateTitle:@"Unhide"]; - [button setButtonType:CPToggleButton]; - [button setTarget:self]; - [button setAction:@selector(hide:)]; - - var textField = [[CPTextField alloc] initWithFrame:CGRectMake(230, 10, 500, 50)]; - [textField setStringValue:@"Test: 1/ Hide the red view, 2/ resize the window (and the red view), 3/ unhide the view.\n Expected: the red view should be visible and resized."]; - - view = [[CustomView alloc] initWithFrame:CGRectMake(100,100, 200,200)]; - [view setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - - [contentView addSubview:button]; - [contentView addSubview:textField]; - [contentView addSubview:view]; - - [theWindow orderFront:self]; -} - -- (void)hide:(id)sender -{ - var state = [sender state]; - [view setHidden:(state == CPOnState)]; -} - -@end - -@implementation CustomView : CPView -{ -} - -- (void)drawRect:(CGRect)aRect -{ - var ctx = [[CPGraphicsContext currentContext] graphicsPort]; - - [[CPColor redColor] set]; - - CGContextFillRect(ctx, [self bounds]); -} - -@end \ No newline at end of file diff --git a/Tests/Manual/Issue-1357-fix/Resources/spinner.gif b/Tests/Manual/Issue-1357-fix/Resources/spinner.gif deleted file mode 100644 index a5e705f6c..000000000 Binary files a/Tests/Manual/Issue-1357-fix/Resources/spinner.gif and /dev/null differ diff --git a/Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j b/Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j index 69fd91f91..62c3142e1 100644 --- a/Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j +++ b/Tests/Manual/SmartFoldersDemo/BadgedOutlineView.j @@ -36,21 +36,21 @@ var CPSourceListDataSource_sourceList_itemHasBadge_ = 1 << 1, - (void)setSourceListDataSource:(id)aDataSource { _sourceListDataSource = aDataSource; - implementedSourceListDataSourceMethods = 0; + _implementedSourceListDataSourceMethods = 0; if ([_sourceListDataSource respondsToSelector:@selector(sourceList:itemHasBadge:)]) - implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_itemHasBadge_; + _implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_itemHasBadge_; if ([_sourceListDataSource respondsToSelector:@selector(sourceList:badgeValueForItem:)]) - implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeValueForItem_; + _implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeValueForItem_; if ([_sourceListDataSource respondsToSelector:@selector(sourceList:badgeBackgroundColorForItem:)]) - implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeBackgroundColorForItem_; + _implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeBackgroundColorForItem_; if ([_sourceListDataSource respondsToSelector:@selector(sourceList:badgeTextColorForItem:)]) - implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeTextColorForItem_; + _implementedSourceListDataSourceMethods |= CPSourceListDataSource_sourceList_badgeTextColorForItem_; } - (BOOL)itemHasBadge:(id)item { - if (implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_itemHasBadge_) + if (_implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_itemHasBadge_) return [_sourceListDataSource sourceList:self itemHasBadge:item]; return NO; @@ -58,7 +58,7 @@ var CPSourceListDataSource_sourceList_itemHasBadge_ = 1 << 1, - (CPInteger)badgeValueForItem:(id)item { - if ([self itemHasBadge:item] && implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeValueForItem_) + if ([self itemHasBadge:item] && _implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeValueForItem_) return [_sourceListDataSource sourceList:self badgeValueForItem:item]; return CPNotFound; @@ -137,7 +137,7 @@ var CPSourceListDataSource_sourceList_itemHasBadge_ = 1 << 1, textColor = [CPColor whiteColor]; //If the data source returns a custom colour.. - if (implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeBackgroundColorForItem_) + if (_implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeBackgroundColorForItem_) { backgroundColor = [_sourceListDataSource sourceList:self badgeBackgroundColorForItem:rowItem]; @@ -148,7 +148,7 @@ var CPSourceListDataSource_sourceList_itemHasBadge_ = 1 << 1, backgroundColor = BADGE_BACKGROUND_COLOR; //If the delegate wants a custom badge text colour.. - if (implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeTextColorForItem_) + if (_implementedSourceListDataSourceMethods & CPSourceListDataSource_sourceList_badgeTextColorForItem_) { textColor = [_sourceListDataSource sourceList:self badgeTextColorForItem:rowItem]; diff --git a/Tests/Manual/ThemeBrowser/Resources/MainMenu.cib b/Tests/Manual/ThemeBrowser/Resources/MainMenu.cib index f0be6b3b2..689e5444d 100644 --- a/Tests/Manual/ThemeBrowser/Resources/MainMenu.cib +++ b/Tests/Manual/ThemeBrowser/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;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;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;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;19E;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;23E;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;24E;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;22E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;25E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;22E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;23E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;27E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;28E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;29E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;30E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;31E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;32E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;33E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;21E;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;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;35E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;36E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;37E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;38E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{408, 63}, {569, 418}}S;22;{{0, 0}, {1680, 1028}}d;1;7S;15;CPTheme Browserd;1;0S;20;{{0, 0}, {569, 418}}d;2;18S;6;normalS;13;AppControllerE;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;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;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;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;19E;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;23E;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;24E;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;22E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;25E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;22E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;26E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;23E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;27E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;28E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;29E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;30E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;31E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;32E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;33E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;21E;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;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;34E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;35E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;36E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;38E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;38E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;39E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;40E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{408, 63}, {569, 418}}S;22;{{0, 0}, {1680, 1028}}d;1;7S;15;CPTheme Browserd;1;0S;20;{{0, 0}, {569, 418}}d;2;18S;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;AppControllerE;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/ThemeBrowser/SCMultiLineLabel.j b/Tests/Manual/ThemeBrowser/SCMultiLineLabel.j index ffc225bdc..660dd6792 100644 --- a/Tests/Manual/ThemeBrowser/SCMultiLineLabel.j +++ b/Tests/Manual/ThemeBrowser/SCMultiLineLabel.j @@ -138,4 +138,26 @@ [self setNeedsLayout]; } +- (CPView)createEphemeralSubviewNamed:(CPString)aName +{ + if (aName === "bezel-view") + { + var view = [[CPView alloc] initWithFrame:CGRectMakeZero()]; + + [view setHitTests:NO]; + + return view; + } + else + { + var view = [[_CPImageAndTextView alloc] initWithFrame:CGRectMakeZero()]; + + [view setHitTests:NO]; + + return view; + } + + return [super createEphemeralSubviewNamed:aName]; +} + @end diff --git a/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.cib b/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.cib index f5f08f607..77aca1211 100644 --- a/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.cib +++ b/Tests/Manual/ThemeKitchenSink/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;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;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;60E;D;K;6;CP$UIDd;2;61E;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;62E;D;K;6;CP$UIDd;2;64E;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;129E;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;136E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;137E;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;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;143E;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;149E;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;153E;D;K;6;CP$UIDd;1;0E;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;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;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;161E;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;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;3;173E;D;K;6;CP$UIDd;3;175E;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;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;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;185E;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;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;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;1;0E;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;1;0E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;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;64E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;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;97E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;86E;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;3;110E;D;K;6;CP$UIDd;2;86E;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;2;64E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;122E;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;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;180E;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;3;205E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;192E;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;269E;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;270E;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;211E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;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;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;259E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;221E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;145E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;212E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;180E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;185E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;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;25E;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;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;312E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;223E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;314E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;315E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;314E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;319E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;321E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;322E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;323E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;324E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;67E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;324E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;327E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;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;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;333E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;334E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;335E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;336E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;74E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;74E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;337E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;342E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;78E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;78E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;343E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;344E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;345E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;346E;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;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;352E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;354E;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;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;355E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;86E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;355E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;364E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;366E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;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;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;369E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;97E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;370E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;371E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;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;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;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;376E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;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;379E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;380E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;381E;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;382E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;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;385E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;104E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;104E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;386E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;387E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;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;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;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;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;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;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;393E;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;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;110E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;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;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;397E;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;376E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;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;379E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;380E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;399E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;400E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;401E;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;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;402E;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;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;403E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;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;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;407E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;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;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;409E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;410E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;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;123E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;413E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;414E;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;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;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;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;416E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;129E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;416E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;3;171E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;421E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;422E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;382E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;424E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;134E;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;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;430E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;431E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;438E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;440E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;442E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;443E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;444E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;445E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;446E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;447E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;448E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;444E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;449E;K;7;$aimageD;K;6;CP$UIDd;3;450E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;451E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;455E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;458E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;459E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;461E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;461E;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;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;462E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;465E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;10;$classnameS;12;CPTokenFieldK;8;$classesA;S;12;CPTokenFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;468E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;469E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;425E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;470E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;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;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;472E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;473E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;474E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;475E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;476E;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;332E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;332E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;477E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;330E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;330E;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;148E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;482E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;484E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;425E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;425E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;425E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;485E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;486E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;487E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;484E;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;480E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;330E;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;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;488E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;489E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;491E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;492E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;267E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;493E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;494E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;496E;K;7;$aimageD;K;6;CP$UIDd;3;497E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;498E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;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;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;503E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;504E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;505E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;506E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;507E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;508E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;16;CPLevelIndicatorK;8;$classesA;S;16;CPLevelIndicatorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;512E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;376E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;376E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;425E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;439E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;376E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;376E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;425E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;425E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;513E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;514E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;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;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;526E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;9;_minValueD;K;6;CP$UIDd;3;425E;K;9;_maxValueD;K;6;CP$UIDd;3;517E;K;12;_doubleValueD;K;6;CP$UIDd;3;425E;K;12;_controlSizeD;K;6;CP$UIDd;3;425E;K;14;_indeterminateD;K;6;CP$UIDd;3;330E;K;6;_styleD;K;6;CP$UIDd;3;425E;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;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;527E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;529E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;491E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;532E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPToolbarK;8;$classesA;S;9;CPToolbarS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;22;CPToolbarIdentifierKeyD;K;6;CP$UIDd;3;533E;K;23;CPToolbarDisplayModeKeyD;K;6;CP$UIDd;3;373E;K;34;CPToolbarShowsBaselineSeparatorKeyD;K;6;CP$UIDd;3;330E;K;35;CPToolbarAllowsUserCustomizationKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarIsVisibleKeyD;K;6;CP$UIDd;3;330E;K;20;CPToolbarSizeModeKeyD;K;6;CP$UIDd;3;373E;K;27;CPToolbarIdentifiedItemsKeyD;K;6;CP$UIDd;3;535E;K;24;CPToolbarDefaultItemsKeyD;K;6;CP$UIDd;3;536E;K;24;CPToolbarAllowedItemsKeyD;K;6;CP$UIDd;3;537E;K;27;CPToolbarSelectableItemsKeyD;K;6;CP$UIDd;3;538E;K;20;CPToolbarDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPToolbarItemK;8;$classesA;S;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;539E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;540E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;540E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;541E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;542E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;543E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;545E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;546E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;546E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;19;_CPToolbarSpaceItemK;8;$classesA;S;19;_CPToolbarSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;E;D;K;10;$classnameS;27;_CPToolbarFlexibleSpaceItemK;8;$classesA;S;27;_CPToolbarFlexibleSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;547E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;548E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;548E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;1;0E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;425E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;1;0E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;3;179E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;549E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;549E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;498E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;3;205E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;421E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;422E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;382E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;552E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;430E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;431E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;555E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;440E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;442E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;443E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;556E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;7;$aimageD;K;6;CP$UIDd;3;557E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;446E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;447E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;448E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;556E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;449E;K;7;$aimageD;K;6;CP$UIDd;3;558E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;451E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;559E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;458E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;459E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;560E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;461E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;461E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;462E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;561E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;465E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;453E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;468E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;560E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;562E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;425E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;470E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;472E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;473E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;563E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;475E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;564E;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;332E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;332E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;477E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;330E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;148E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;481E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;565E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;566E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;425E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;425E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;425E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;485E;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;480E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;488E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;489E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;569E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;492E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;268E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;493E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;494E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;554E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;496E;K;7;$aimageD;K;6;CP$UIDd;3;570E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;498E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;503E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;504E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;505E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;572E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;507E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;508E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;573E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;512E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;376E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;376E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;425E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;439E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;376E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;376E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;425E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;425E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;513E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;514E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;515E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;516E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;517E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;526E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;9;_minValueD;K;6;CP$UIDd;3;425E;K;9;_maxValueD;K;6;CP$UIDd;3;517E;K;12;_doubleValueD;K;6;CP$UIDd;3;425E;K;12;_controlSizeD;K;6;CP$UIDd;3;425E;K;14;_indeterminateD;K;6;CP$UIDd;3;330E;K;6;_styleD;K;6;CP$UIDd;3;425E;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;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;527E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;529E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;490E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;569E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;532E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;22;CPToolbarIdentifierKeyD;K;6;CP$UIDd;3;533E;K;23;CPToolbarDisplayModeKeyD;K;6;CP$UIDd;3;373E;K;34;CPToolbarShowsBaselineSeparatorKeyD;K;6;CP$UIDd;3;330E;K;35;CPToolbarAllowsUserCustomizationKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarIsVisibleKeyD;K;6;CP$UIDd;3;330E;K;20;CPToolbarSizeModeKeyD;K;6;CP$UIDd;3;373E;K;27;CPToolbarIdentifiedItemsKeyD;K;6;CP$UIDd;3;574E;K;24;CPToolbarDefaultItemsKeyD;K;6;CP$UIDd;3;575E;K;24;CPToolbarAllowedItemsKeyD;K;6;CP$UIDd;3;576E;K;27;CPToolbarSelectableItemsKeyD;K;6;CP$UIDd;3;577E;K;20;CPToolbarDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;539E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;540E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;540E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;541E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;542E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;543E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;545E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;546E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;546E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;547E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;548E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;548E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;1;0E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;425E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;1;0E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;3;210E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;549E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;549E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;498E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;439E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;439E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;332E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;466E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;578E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;579E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;580E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;581E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;582E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;409E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;584E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;11;CPSplitViewK;8;$classesA;S;11;CPSplitViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;585E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;330E;K;26;CPSplitViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;588E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;589E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;590E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;219E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;593E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;227E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;226E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;594E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;330E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;595E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;596E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;597E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;598E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;221E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;220E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;219E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;597E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;597E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;219E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;457E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;599E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;12;$agrid-colorD;K;6;CP$UIDd;3;600E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;601E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;602E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;425E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;439E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;332E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;330E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;330E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;330E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;330E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;603E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;600E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;425E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;332E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;605E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;229E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;606E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;607E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;610E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;611E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;612E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;607E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;613E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;614E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;615E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;616E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;217E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;619E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;217E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;622E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;593E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;593E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;624E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;221E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;330E;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;230E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;625E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;626E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;627E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;628E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;626E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;626E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;629E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;231E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;233E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;255E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;254E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;594E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;332E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;630E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;631E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;632E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;633E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;634E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;235E;E;D;K;10;$classnameS;17;CPPredicateEditorK;8;$classesA;S;17;CPPredicateEditorS;12;CPRuleEditorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;632E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;632E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;635E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;636E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;637E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;330E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;3;332E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;332E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;638E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;601E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;376E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;1;0E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;639E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;640E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;641E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;642E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;643E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;644E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;646E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;3;647E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;376E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;425E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;425E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;425E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;425E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;332E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;332E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;648E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;649E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;650E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;376E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;651E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;652E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;653E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;373E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;425E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;425E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;425E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;654E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;332E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;330E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;655E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;656E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;657E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;659E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;660E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;661E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;662E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;663E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;664E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;665E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;666E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;667E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;591E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;668E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;669E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;670E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;671E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;500E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;477E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;672E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;673E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;232E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;619E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;674E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;675E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;232E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;622E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;676E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;676E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;677E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;257E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;678E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;263E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;262E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;594E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;594E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;330E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;679E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;680E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;681E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;682E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;259E;E;D;K;10;$classnameS;13;CPOutlineViewK;8;$classesA;S;13;CPOutlineViewS;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;258E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;257E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;681E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;681E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;257E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;457E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;599E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;12;$agrid-colorD;K;6;CP$UIDd;3;600E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;601E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;602E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;425E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;439E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;332E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;330E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;330E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;330E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;683E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;600E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;425E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;332E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;684E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;264E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;K;34;CPOutlineViewOutlineTableColumnKeyD;K;6;CP$UIDd;3;260E;K;35;CPOutlineViewIndentationPerLevelKeyD;K;6;CP$UIDd;3;685E;K;26;CPOutlineViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;24;CPOutlineViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;686E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;685E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;687E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;688E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;689E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;607E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;608E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;690E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;691E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;692E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;616E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;256E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;619E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;693E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;621E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;617E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;618E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;571E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;256E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;622E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;21;CPScrollerControlSizeD;K;6;CP$UIDd;3;425E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;678E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;623E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;623E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;678E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;624E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;259E;K;33;CPTableHeaderViewDrawsColumnLinesD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;265E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;694E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;330E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;332E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;330E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;330E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;330E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;330E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;330E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;332E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;695E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;696E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;695E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;697E;E;S;13;CPApplicationD;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;212E;D;K;6;CP$UIDd;3;180E;E;E;S;8;delegateS;21;initialFirstResponderS;16;arrayController1S;11;outlineViewS;9;tableViewS;9;theWindowS;10;tokenFieldS;7;window1S;7;window2S;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;29;value: arrangedObjects.animalS;5;valueS;22;arrangedObjects.animalD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;E;E;S;27;value: arrangedObjects.legsS;20;arrangedObjects.legsD;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;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;73E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;128E;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;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;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;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;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;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;79E;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;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;3;103E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;114E;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;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;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;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;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;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;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;116E;D;K;6;CP$UIDd;3;117E;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;120E;D;K;6;CP$UIDd;3;121E;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;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;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;130E;E;E;S;19;NewApplication HelpS;1;?S;8;CPWindowd;10;1879048192S;24;{{335, 649}, {393, 379}}S;22;{{0, 0}, {2560, 1418}}S;18;Theme Kitchen Sinkd;1;0S;20;{{0, 0}, {393, 379}}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;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;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;E;E;S;6;normalS;6;{1, 1}S;21;{{53, 17}, {103, 25}}S;19;{{0, 0}, {103, 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;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;699E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;d;1;4S;11;Push Buttond;2;14S;21;{{49, 58}, {106, 25}}S;19;{{0, 0}, {106, 25}}S;17;bordered+selectedD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;S;15;Gradient ButtonS;21;{{18, 97}, {168, 25}}S;19;{{0, 0}, {168, 25}}D;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;498E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;449E;E;S;17;Round Rect ButtonS;22;{{16, 134}, {176, 29}}S;19;{{0, 0}, {176, 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;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;703E;E;S;11;PlaceholderS;22;{{16, 175}, {176, 29}}S;16;bezeled+editableS;10;Text FieldS;22;{{16, 215}, {176, 29}}S;11;searchfieldS;36;bezeled+editable+placeholder+roundedS;9;Search...d;3;254S;22;{{16, 253}, {176, 29}}S;10;tokenfieldD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Token FieldS;22;{{16, 292}, {176, 31}}S;19;{{0, 0}, {176, 31}}S;8;comboboxS;44;bezeled+button-bordered+editable+placeholderS;17;Combo PlaceholderD;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;d;1;5S;22;{{212, 16}, {161, 29}}S;19;{{0, 0}, {161, 29}}D;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;706E;E;S;10;datePickerS;16;bezeled+borderedD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;425E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;707E;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;708E;E;S;21;{{210, 60}, {50, 21}}S;18;{{0, 0}, {50, 21}}S;9;check-boxS;8;selectedS;2;OnS;22;{{212, 97}, {161, 25}}S;19;{{0, 0}, {161, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;699E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;d;2;12S;6;Item 1S;17;_popUpItemAction:S;6;Item 2S;6;Item 3S;23;{{212, 136}, {165, 25}}S;19;{{0, 0}, {165, 25}}S;17;segmented-controlD;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;D;K;6;CP$UIDd;3;712E;E;E;S;23;{{212, 179}, {161, 38}}S;19;{{0, 0}, {161, 38}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;714E;D;K;6;CP$UIDd;3;715E;E;E;S;23;{{212, 257}, {161, 18}}S;19;{{0, 0}, {161, 18}}S;15;level-indicatorS;23;{{212, 295}, {136, 21}}S;19;{{0, 0}, {136, 21}}S;6;sliderd;2;50d;3;100S;22;{{356, 295}, {17, 60}}S;18;{{0, 0}, {17, 60}}S;8;verticalS;22;{{210, 317}, {30, 32}}S;18;{{0, 0}, {30, 32}}S;17;circular+verticalS;22;{{20, 333}, {168, 20}}S;19;{{0, 0}, {168, 20}}S;18;progress-indicatorS;21;{{264, 60}, {64, 21}}S;18;{{0, 0}, {64, 21}}S;3;OffS;21;{{318, 60}, {57, 21}}S;18;{{0, 0}, {57, 21}}S;4;BothS;36;31335BF5-06C2-4494-957E-17ECA44216CDD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;534E;K;10;CP.objectsD;K;23;CPToolbarShowColorsItemD;K;6;CP$UIDd;3;173E;K;18;CPToolbarSpaceItemD;K;6;CP$UIDd;3;175E;K;36;244A013B-F872-4F2A-8B72-516062AA8096D;K;6;CP$UIDd;3;178E;K;26;CPToolbarFlexibleSpaceItemD;K;6;CP$UIDd;3;177E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;CPToolbarShowColorsItemS;6;ColorsS;16;Show Color Paneld;2;-1S;21;orderFrontColorPanel:D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;544E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;716E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;717E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;718E;E;S;6;{0, 0}S;36;244A013B-F872-4F2A-8B72-516062AA8096S;6;SearchS;8;{96, 29}S;21;{{-4, 11}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;8;DisabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;185E;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;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;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;E;E;S;17;bordered+disabledD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;S;26;bordered+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;449E;E;S;37;bezeled+disabled+editable+placeholderS;25;bezeled+disabled+editableS;45;bezeled+disabled+editable+placeholder+roundedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;53;bezeled+button-bordered+disabled+editable+placeholderD;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;25;bezeled+bordered+disabledD;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;707E;E;D;K;6;$classD;K;6;CP$UIDd;3;483E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;708E;E;S;17;disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;702E;E;S;8;disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;719E;D;K;6;CP$UIDd;3;720E;D;K;6;CP$UIDd;3;721E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;534E;K;10;CP.objectsD;K;23;CPToolbarShowColorsItemD;K;6;CP$UIDd;3;206E;K;18;CPToolbarSpaceItemD;K;6;CP$UIDd;3;207E;K;36;244A013B-F872-4F2A-8B72-516062AA8096D;K;6;CP$UIDd;3;209E;K;26;CPToolbarFlexibleSpaceItemD;K;6;CP$UIDd;3;208E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;AppControllerS;32;{10000000000000, 10000000000000}d;10;1618478080S;24;{{283, 843}, {480, 270}}d;2;15S;20;{{0, 0}, {480, 270}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;215E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;256E;E;E;d;2;18S;9;splitviewS;21;{{0, 183}, {480, 87}}S;19;{{0, 0}, {480, 87}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;593E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;595E;E;E;d;1;8S;10;scrollviewD;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;724E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;726E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;229E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;S;19;{{1, 1}, {478, 69}}S;19;{{0, 0}, {478, 69}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;221E;E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;728E;E;d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;604E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;729E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;730E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;d;3;116d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;731E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;734E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;356D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;740E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;741E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;21;{{1, -47}, {223, 15}}S;19;{{0, 0}, {223, 15}}d;11;-2147483648S;8;scrollerS;29;_horizontalScrollerDidScroll:S;23;{{224, -32}, {15, 102}}S;19;{{0, 0}, {15, 102}}S;27;_verticalScrollerDidScroll:S;19;{{0, 0}, {478, 25}}S;14;tableHeaderRowS;20;{{0, 99}, {480, 75}}S;19;{{0, 0}, {480, 75}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;232E;E;E;S;6;CPViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;630E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;S;19;{{1, 1}, {478, 73}}S;19;{{0, 0}, {478, 73}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;235E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;742E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;744E;E;E;d;2;34S;11;rule-editord;2;75S;7;rowTypeS;8;criteriaS;13;displayValuesS;10;boundArrayS;7;subrowsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;33;_CPRuleEditorViewUnboundRowHolderK;8;$classesA;S;33;_CPRuleEditorViewUnboundRowHolderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;645E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;745E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;243E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;746E;D;K;6;CP$UIDd;3;747E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;E;E;S;3;AnyS;3;AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;242E;E;E;S;25;of the following are trued;3;700D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;748E;D;K;6;CP$UIDd;3;749E;D;K;6;CP$UIDd;3;750E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;E;E;S;4;nameD;K;10;$classnameS;20;_CPKeyPathExpressionK;8;$classesA;S;20;_CPKeyPathExpressionS;21;_CPFunctionExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;658E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;751E;K;11;CPArgumentsD;K;6;CP$UIDd;3;752E;K;9;CPOperandD;K;6;CP$UIDd;3;754E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;S;7;addressD;K;6;$classD;K;6;CP$UIDd;3;658E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;751E;K;11;CPArgumentsD;K;6;CP$UIDd;3;755E;K;9;CPOperandD;K;6;CP$UIDd;3;754E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;S;4;signD;K;6;$classD;K;6;CP$UIDd;3;658E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;751E;K;11;CPArgumentsD;K;6;CP$UIDd;3;756E;K;9;CPOperandD;K;6;CP$UIDd;3;754E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;E;E;S;8;containsd;2;99S;11;begins withS;9;ends withd;1;9S;2;isS;6;is notS;24;{{-100, 160}, {360, 15}}S;19;{{0, 0}, {360, 15}}S;20;{{463, 1}, {15, 73}}S;18;{{0, 0}, {15, 73}}S;19;{{0, 0}, {480, 90}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;678E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;679E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;757E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;725E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;758E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;591E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;S;19;{{1, 1}, {478, 72}}S;19;{{0, 0}, {478, 72}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;259E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;261E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;604E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;729E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;729E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;730E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;d;2;16d;3;101D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;759E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;331E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;d;3;371D;K;6;$classD;K;6;CP$UIDd;3;609E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;760E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;732E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;331E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;733E;K;36;_CPTableColumnHeaderViewTextColorKeyD;K;6;CP$UIDd;1;0E;K;42;_CPTableColumnHeaderViewTextShadowColorKeyD;K;6;CP$UIDd;1;0E;K;36;_CPTableColumnHeaderViewAlignmentKeyD;K;6;CP$UIDd;3;425E;K;40;_CPTableColumnHeaderViewLineBreakModeKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;735E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;736E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;737E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;738E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;739E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;480E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;439E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;21;{{1, -44}, {223, 15}}S;23;{{224, -29}, {15, 102}}S;19;CPMutableDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;E;E;S;17;.Lucida Grande UId;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;699E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;E;E;S;7;Combo 1S;7;Combo 2D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;E;E;d;15;-62135510400000d;14;64092297600000D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;761E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;762E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;330E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;373E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;763E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;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;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;373E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;764E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;767E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;768E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;772E;E;D;K;6;$classD;K;6;CP$UIDd;3;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;773E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;774E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;775E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;772E;E;S;7;CPImageS;21;CPImageNameColorPanelD;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;777E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;331E;K;9;frameworkD;K;6;CP$UIDd;3;331E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;761E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;762E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;330E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;373E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;709E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;763E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;373E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;764E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;778E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;768E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;779E;E;D;K;6;$classD;K;6;CP$UIDd;3;713E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;773E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;764E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;765E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;766E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;780E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;6;$afontD;K;6;CP$UIDd;3;436E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;775E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;769E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;770E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;779E;E;S;20;{{1, 70}, {478, 17}}S;19;{{0, 0}, {478, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;229E;E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;781E;D;K;6;CP$UIDd;3;781E;D;K;6;CP$UIDd;3;781E;D;K;6;CP$UIDd;3;373E;E;E;S;18;{{0, 0}, {14, 25}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;783E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;784E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;S;6;AnimalS;17;{{3, 0}, {-6, 0}}S;17;{{0, 0}, {-6, 0}}S;22;editable+tableDataViewS;9;Text Celld;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;785E;E;E;S;4;LegsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;786E;D;K;6;CP$UIDd;3;786E;D;K;6;CP$UIDd;3;786E;D;K;6;CP$UIDd;3;373E;E;E;D;K;10;$classnameS;28;_CPRuleEditorViewSliceHolderK;8;$classesA;S;28;_CPRuleEditorViewSliceHolderS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;743E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;235E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;632E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;632E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;235E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;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;3;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;238E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;787E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;788E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;789E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;241E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;790E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;791E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;792E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;244E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;793E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;794E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;795E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;248E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;796E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;797E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;495E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;439E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;7;$aimageD;K;6;CP$UIDd;3;798E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;441E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;799E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;448E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;454E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;455E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;733E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;439E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;457E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;12;valueForKey:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;801E;E;E;D;K;10;$classnameS;17;_CPSelfExpressionK;8;$classesA;S;17;_CPSelfExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;753E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;802E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;803E;E;E;S;20;{{1, 73}, {478, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;264E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;804E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;805E;E;E;S;9;Segment 1S;2;s2S;2;s3S;18;{{0, 0}, {78, 18}}D;K;6;$classD;K;6;CP$UIDd;3;456E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;806E;E;S;5;radioS;27;bordered+roundRect+selectedS;8;Choice 1f;3;0.5f;4;0.05D;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;771E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;807E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;714E;E;S;19;{{0, 20}, {78, 18}}S;18;bordered+roundRectS;7;Radio 2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;776E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;808E;E;S;36;bordered+disabled+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;3;771E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;809E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;722E;E;S;27;bordered+disabled+roundRectf;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;610E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;610E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;d;2;11D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;613E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;613E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;f;12;0.9100000262S;19;{{1, -4}, {66, 25}}S;18;{{0, 0}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;21;{{66, -4}, {175, 25}}S;19;{{0, 0}, {175, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;20;{{31, -4}, {86, 25}}S;18;{{0, 0}, {86, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;22;{{116, -4}, {107, 25}}S;19;{{0, 0}, {107, 25}}D;K;6;$classD;K;6;CP$UIDd;3;437E;K;4;nameD;K;6;CP$UIDd;3;700E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;701E;K;5;valueD;K;6;CP$UIDd;3;810E;E;S;21;{{224, 1}, {168, 25}}D;K;10;$classnameS;26;_CPConstantValueExpressionK;8;$classesA;S;26;_CPConstantValueExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;800E;K;15;CPConstantValueD;K;6;CP$UIDd;3;657E;E;D;K;6;$classD;K;6;CP$UIDd;3;800E;K;15;CPConstantValueD;K;6;CP$UIDd;3;660E;E;D;K;6;$classD;K;6;CP$UIDd;3;800E;K;15;CPConstantValueD;K;6;CP$UIDd;3;662E;E;D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;687E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;687E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;782E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;690E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;727E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;727E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;690E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;586E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;714E;D;K;6;CP$UIDd;3;715E;E;E;S;22;{"width":0,"height":0}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;722E;D;K;6;CP$UIDd;3;723E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;435E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;698E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;784E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;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;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;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;60E;D;K;6;CP$UIDd;2;61E;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;62E;D;K;6;CP$UIDd;2;64E;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;129E;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;136E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;137E;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;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;143E;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;149E;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;153E;D;K;6;CP$UIDd;1;0E;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;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;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;161E;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;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;3;173E;D;K;6;CP$UIDd;3;175E;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;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;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;185E;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;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;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;1;0E;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;1;0E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;264E;D;K;6;CP$UIDd;3;266E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;268E;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;64E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;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;97E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;86E;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;3;110E;D;K;6;CP$UIDd;2;86E;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;2;64E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;122E;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;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;268E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;180E;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;3;205E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;261E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;192E;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;269E;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;270E;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;211E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;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;140E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;259E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;221E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;145E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;212E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;180E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;185E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;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;25E;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;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;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;312E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;223E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;314E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;315E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;266E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;314E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;319E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;321E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;322E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;323E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;324E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;67E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;324E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;327E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;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;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;333E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;334E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;335E;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;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;336E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;74E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;74E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;337E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;339E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;340E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;342E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;78E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;78E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;343E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;344E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;345E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;346E;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;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;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;74E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;352E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;354E;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;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;355E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;86E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;86E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;355E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;356E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;362E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;364E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;366E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;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;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;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;86E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;369E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;97E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;370E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;371E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;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;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;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;376E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;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;379E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;380E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;381E;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;382E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;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;385E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;104E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;104E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;386E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;387E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;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;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;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;104E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;391E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;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;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;393E;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;104E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;110E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;110E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;394E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;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;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;397E;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;376E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;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;379E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;110E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;380E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;399E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;400E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;401E;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;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;402E;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;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;403E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;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;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;407E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;408E;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;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;123E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;409E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;410E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;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;123E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;413E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;414E;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;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;330E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;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;332E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;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;123E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;416E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;325E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;129E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;64E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;416E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;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;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;419E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;3;171E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;421E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;422E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;382E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;424E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;134E;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;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;427E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;430E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;435E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;7;$aimageD;K;6;CP$UIDd;3;439E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;440E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;443E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;445E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;446E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;7;$aimageD;K;6;CP$UIDd;3;448E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;449E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;450E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;451E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;452E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;447E;K;6;$afontD;K;6;CP$UIDd;3;453E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;7;$aimageD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;455E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;456E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;460E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;462E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;465E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;466E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;467E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;468E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;469E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;469E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;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;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;471E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;474E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;475E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;330E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;330E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;476E;E;D;K;10;$classnameS;12;CPTokenFieldK;8;$classesA;S;12;CPTokenFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;477E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;478E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;467E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;480E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;425E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;481E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;330E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;332E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;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;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;482E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;483E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;484E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;485E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;486E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;487E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;488E;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;332E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;332E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;489E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;330E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;330E;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;148E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;490E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;491E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;492E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;493E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;494E;K;6;$afontD;K;6;CP$UIDd;3;495E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;496E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;498E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;425E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;425E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;425E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;499E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;500E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;501E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;498E;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;492E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;330E;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;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;502E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;503E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;505E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;506E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;507E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;267E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;508E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;435E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;7;$aimageD;K;6;CP$UIDd;3;511E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;512E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;513E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;514E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;516E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;517E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;267E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;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;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;521E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;522E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;523E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;526E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;527E;E;D;K;10;$classnameS;16;CPLevelIndicatorK;8;$classesA;S;16;CPLevelIndicatorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;528E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;529E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;530E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;521E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;531E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;376E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;376E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;425E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;441E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;376E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;376E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;425E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;425E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;532E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;533E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;534E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;521E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;535E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;536E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;537E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;538E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;539E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;534E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;540E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;541E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;536E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;537E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;534E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;545E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;536E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;537E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;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;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;546E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;547E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;548E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;549E;K;9;_minValueD;K;6;CP$UIDd;3;425E;K;9;_maxValueD;K;6;CP$UIDd;3;537E;K;12;_doubleValueD;K;6;CP$UIDd;3;425E;K;12;_controlSizeD;K;6;CP$UIDd;3;425E;K;14;_indeterminateD;K;6;CP$UIDd;3;330E;K;6;_styleD;K;6;CP$UIDd;3;425E;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;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;521E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;552E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;553E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;134E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;554E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;555E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;134E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;505E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;556E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;557E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;9;CPToolbarK;8;$classesA;S;9;CPToolbarS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;170E;K;22;CPToolbarIdentifierKeyD;K;6;CP$UIDd;3;558E;K;23;CPToolbarDisplayModeKeyD;K;6;CP$UIDd;3;373E;K;34;CPToolbarShowsBaselineSeparatorKeyD;K;6;CP$UIDd;3;330E;K;35;CPToolbarAllowsUserCustomizationKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarIsVisibleKeyD;K;6;CP$UIDd;3;330E;K;20;CPToolbarSizeModeKeyD;K;6;CP$UIDd;3;373E;K;27;CPToolbarIdentifiedItemsKeyD;K;6;CP$UIDd;3;560E;K;24;CPToolbarDefaultItemsKeyD;K;6;CP$UIDd;3;561E;K;24;CPToolbarAllowedItemsKeyD;K;6;CP$UIDd;3;562E;K;27;CPToolbarSelectableItemsKeyD;K;6;CP$UIDd;3;563E;K;20;CPToolbarDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPToolbarItemK;8;$classesA;S;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;564E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;565E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;565E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;566E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;442E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;567E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;569E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;570E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;570E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;19;_CPToolbarSpaceItemK;8;$classesA;S;19;_CPToolbarSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;E;D;K;10;$classnameS;27;_CPToolbarFlexibleSpaceItemK;8;$classesA;S;27;_CPToolbarFlexibleSpaceItemS;13;CPToolbarItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;571E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;572E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;572E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;1;0E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;425E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;1;0E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;3;179E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;573E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;573E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;574E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;575E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;576E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;330E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;330E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;476E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;3;205E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;421E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;577E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;382E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;578E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;579E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;580E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;581E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;7;$aimageD;K;6;CP$UIDd;3;582E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;583E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;443E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;445E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;446E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;584E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;7;$aimageD;K;6;CP$UIDd;3;585E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;586E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;450E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;135E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;451E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;452E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;584E;K;6;$afontD;K;6;CP$UIDd;3;587E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;7;$aimageD;K;6;CP$UIDd;3;588E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;589E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;456E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;590E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;591E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;465E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;466E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;592E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;593E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;469E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;469E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;471E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;594E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;595E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;475E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;330E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;330E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;476E;E;D;K;6;$classD;K;6;CP$UIDd;3;144E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;477E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;458E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;478E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;592E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;596E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;597E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;425E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;481E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;330E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;332E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;482E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;483E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;484E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;598E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;599E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;487E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;600E;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;332E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;332E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;489E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;330E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;148E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;490E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;491E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;492E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;493E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;601E;K;6;$afontD;K;6;CP$UIDd;3;495E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;602E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;603E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;425E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;425E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;425E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;499E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;604E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;605E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;603E;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;492E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;502E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;503E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;607E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;507E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;268E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;508E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;581E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;7;$aimageD;K;6;CP$UIDd;3;608E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;609E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;513E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;514E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;516E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;517E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;192E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;519E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;6;$afontD;K;6;CP$UIDd;3;437E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;376E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;611E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;29;CPSegmentedControlSegmentsKeyD;K;6;CP$UIDd;3;612E;K;29;CPSegmentedControlSelectedKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlSegmentStyleKeyD;K;6;CP$UIDd;3;373E;K;33;CPSegmentedControlTrackingModeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;613E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;614E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;528E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;529E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;530E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;615E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;376E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPLevelIndicatorStyleKeyD;K;6;CP$UIDd;3;376E;K;27;CPLevelIndicatorMinValueKeyD;K;6;CP$UIDd;3;425E;K;27;CPLevelIndicatorMaxValueKeyD;K;6;CP$UIDd;3;441E;K;31;CPLevelIndicatorWarningValueKeyD;K;6;CP$UIDd;3;376E;K;32;CPLevelIndicatorCriticalValueKeyD;K;6;CP$UIDd;3;376E;K;35;CPLevelIndicatorTickMarkPositionKeyD;K;6;CP$UIDd;3;425E;K;36;CPLevelIndicatorNumberOfTickMarksKeyD;K;6;CP$UIDd;3;425E;K;41;CPLevelIndicatorNumberOfMajorTickMarksKeyD;K;6;CP$UIDd;1;0E;K;29;CPLevelIndicatorIsEditableKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;532E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;533E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;534E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;521E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;616E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;536E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;537E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;538E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;539E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;534E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;540E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;617E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;536E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;537E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;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;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;534E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;618E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;536E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;3;425E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;537E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;166E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;546E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;547E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;548E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;619E;K;9;_minValueD;K;6;CP$UIDd;3;425E;K;9;_maxValueD;K;6;CP$UIDd;3;537E;K;12;_doubleValueD;K;6;CP$UIDd;3;425E;K;12;_controlSizeD;K;6;CP$UIDd;3;425E;K;14;_indeterminateD;K;6;CP$UIDd;3;330E;K;6;_styleD;K;6;CP$UIDd;3;425E;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;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;620E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;553E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;150E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;181E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;554E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;555E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;181E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;504E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;606E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;621E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;557E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;331E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;330E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;22;CPToolbarIdentifierKeyD;K;6;CP$UIDd;3;558E;K;23;CPToolbarDisplayModeKeyD;K;6;CP$UIDd;3;373E;K;34;CPToolbarShowsBaselineSeparatorKeyD;K;6;CP$UIDd;3;330E;K;35;CPToolbarAllowsUserCustomizationKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarIsVisibleKeyD;K;6;CP$UIDd;3;330E;K;20;CPToolbarSizeModeKeyD;K;6;CP$UIDd;3;373E;K;27;CPToolbarIdentifiedItemsKeyD;K;6;CP$UIDd;3;622E;K;24;CPToolbarDefaultItemsKeyD;K;6;CP$UIDd;3;623E;K;24;CPToolbarAllowedItemsKeyD;K;6;CP$UIDd;3;624E;K;27;CPToolbarSelectableItemsKeyD;K;6;CP$UIDd;3;625E;K;20;CPToolbarDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;564E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;565E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;565E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;3;566E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;442E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;3;567E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;3;569E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;570E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;570E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;3;172E;K;30;CPToolbarItemItemIdentifierKeyD;K;6;CP$UIDd;3;571E;K;21;CPToolbarItemLabelKeyD;K;6;CP$UIDd;3;572E;K;28;CPToolbarItemPaletteLabelKeyD;K;6;CP$UIDd;3;572E;K;23;CPToolbarItemToolTipKeyD;K;6;CP$UIDd;1;0E;K;19;CPToolbarItemTagKeyD;K;6;CP$UIDd;3;425E;K;22;CPToolbarItemTargetKeyD;K;6;CP$UIDd;1;0E;K;22;CPToolbarItemActionKeyD;K;6;CP$UIDd;1;0E;K;23;CPToolbarItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;21;CPToolbarItemImageKeyD;K;6;CP$UIDd;1;0E;K;30;CPToolbarItemAlternateImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPToolbarItemViewKeyD;K;6;CP$UIDd;3;210E;K;23;CPToolbarItemMinSizeKeyD;K;6;CP$UIDd;3;573E;K;23;CPToolbarItemMaxSizeKeyD;K;6;CP$UIDd;3;573E;K;34;CPToolbarItemVisibilityPriorityKeyD;K;6;CP$UIDd;3;425E;K;29;CPToolbarItemAutovalidatesKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;574E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;575E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;513E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;472E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;473E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;441E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;626E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;441E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;330E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;332E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;330E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;476E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;627E;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;628E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;420E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;629E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;630E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;423E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;631E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;409E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;632E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;633E;E;D;K;10;$classnameS;11;CPSplitViewK;8;$classesA;S;11;CPSplitViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;214E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;213E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;634E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;213E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;636E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;637E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;330E;K;26;CPSplitViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;638E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;639E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;640E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;642E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;643E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;219E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;644E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;227E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;226E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;645E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;330E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;646E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;647E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;648E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;649E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;492E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;650E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;221E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;220E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;219E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;651E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;651E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;219E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;492E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;652E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;12;$agrid-colorD;K;6;CP$UIDd;3;653E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;654E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;655E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;656E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;425E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;441E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;332E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;330E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;330E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;330E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;330E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;657E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;653E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;425E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;332E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;659E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;229E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;660E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;661E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;662E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;664E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;665E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;666E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;661E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;662E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;667E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;668E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;669E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;670E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;671E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;673E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;217E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;674E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;675E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;676E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;671E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;677E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;217E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;678E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;679E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;644E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;680E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;680E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;644E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;682E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;221E;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;230E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;683E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;684E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;685E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;686E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;687E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;231E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;684E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;684E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;688E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;231E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;642E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;689E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;233E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;255E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;254E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;645E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;332E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;690E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;691E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;692E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;693E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;694E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;695E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;235E;E;D;K;10;$classnameS;17;CPPredicateEditorK;8;$classesA;S;17;CPPredicateEditorS;12;CPRuleEditorS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;692E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;692E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;696E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;697E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;698E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;699E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;20;CPRuleEditorEditableD;K;6;CP$UIDd;3;330E;K;35;CPRuleEditorAllowsEmptyCompoundRowsD;K;6;CP$UIDd;3;332E;K;25;CPRuleEditorDisallowEmptyD;K;6;CP$UIDd;3;332E;K;30;CPRuleEditorAlignmentGridWidthD;K;6;CP$UIDd;3;700E;K;23;CPRuleEditorSliceHeightD;K;6;CP$UIDd;3;655E;K;23;CPRuleEditorNestingModeD;K;6;CP$UIDd;3;376E;K;27;CPRuleEditorStringsFilenameD;K;6;CP$UIDd;1;0E;K;26;CPRuleEditorRowTypeKeyPathD;K;6;CP$UIDd;3;701E;K;24;CPRuleEditorItemsKeyPathD;K;6;CP$UIDd;3;702E;K;25;CPRuleEditorValuesKeyPathD;K;6;CP$UIDd;3;703E;K;29;CPRuleEditorBoundArrayKeyPathD;K;6;CP$UIDd;3;704E;K;31;CPRuleEditorSubrowsArrayKeyPathD;K;6;CP$UIDd;3;705E;K;24;CPRuleEditorSlicesHolderD;K;6;CP$UIDd;1;0E;K;18;CPRuleEditorSlicesD;K;6;CP$UIDd;3;706E;K;27;CPRuleEditorBoundArrayOwnerD;K;6;CP$UIDd;3;708E;K;20;CPPredicateTemplatesD;K;6;CP$UIDd;3;709E;E;D;K;10;$classnameS;28;CPPredicateEditorRowTemplateK;8;$classesA;S;28;CPPredicateEditorRowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;376E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;425E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;425E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;425E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;425E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;332E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;332E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;710E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;711E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;712E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;376E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;713E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;238E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;373E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;714E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;715E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;3;236E;K;23;CPPredicateTemplateTypeD;K;6;CP$UIDd;3;373E;K;26;CPPredicateTemplateOptionsD;K;6;CP$UIDd;3;425E;K;27;CPPredicateTemplateModifierD;K;6;CP$UIDd;3;425E;K;36;CPPredicateTemplateLeftAttributeTypeD;K;6;CP$UIDd;3;425E;K;37;CPPredicateTemplateRightAttributeTypeD;K;6;CP$UIDd;3;716E;K;33;CPPredicateTemplateLeftIsWildcardD;K;6;CP$UIDd;3;332E;K;34;CPPredicateTemplateRightIsWildcardD;K;6;CP$UIDd;3;330E;K;24;CPPredicateTemplateViewsD;K;6;CP$UIDd;3;717E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;718E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;719E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;721E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;722E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;723E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;724E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;725E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;331E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;726E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;727E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;373E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;728E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;729E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;641E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;730E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;731E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;732E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;441E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;733E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;515E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;248E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;326E;K;30;CPMenuItemRepresentedObjectKeyD;K;6;CP$UIDd;3;489E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;734E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;735E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;671E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;736E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;232E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;674E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;737E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;738E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;671E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;739E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;232E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;678E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;216E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;215E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;740E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;740E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;741E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;215E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;642E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;742E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;257E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;743E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;263E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;262E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;645E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;645E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;330E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;330E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;330E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;744E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;376E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;745E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;746E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;747E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;492E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;748E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;259E;E;D;K;10;$classnameS;13;CPOutlineViewK;8;$classesA;S;13;CPOutlineViewS;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;258E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;257E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;749E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;749E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;257E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;492E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;652E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;12;$agrid-colorD;K;6;CP$UIDd;3;653E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;750E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;655E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;656E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;425E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;441E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;332E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;330E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;330E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;330E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;751E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;653E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;425E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;332E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;752E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;264E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;K;34;CPOutlineViewOutlineTableColumnKeyD;K;6;CP$UIDd;3;260E;K;35;CPOutlineViewIndentationPerLevelKeyD;K;6;CP$UIDd;3;753E;K;26;CPOutlineViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;24;CPOutlineViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;754E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;753E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;662E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;755E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;756E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;757E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;661E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;662E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;758E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;759E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;332E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;330E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;760E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;670E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;671E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;761E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;256E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;674E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;332E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;373E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;762E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;676E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;671E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;672E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;610E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;763E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;256E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;678E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;330E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;764E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;743E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;680E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;680E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;743E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;681E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;765E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;259E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;265E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;766E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;330E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;332E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;330E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;330E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;330E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;330E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;330E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;332E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;767E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;768E;E;D;K;6;$classD;K;6;CP$UIDd;2;63E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;767E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;769E;E;S;13;CPApplicationD;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;212E;D;K;6;CP$UIDd;3;180E;E;E;S;8;delegateS;21;initialFirstResponderS;16;arrayController1S;11;outlineViewS;9;tableViewS;9;theWindowS;10;tokenFieldS;7;window1S;7;window2S;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;29;value: arrangedObjects.animalS;5;valueS;22;arrangedObjects.animalD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;E;E;S;27;value: arrangedObjects.legsS;20;arrangedObjects.legsD;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;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;73E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;128E;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;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;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;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;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;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;79E;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;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;3;103E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;114E;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;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;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;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;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;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;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;116E;D;K;6;CP$UIDd;3;117E;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;120E;D;K;6;CP$UIDd;3;121E;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;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;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;130E;E;E;S;19;NewApplication HelpS;1;?S;8;CPWindowd;10;1881669632S;22;{{50, 89}, {400, 379}}S;22;{{0, 0}, {2560, 1418}}S;18;Theme Kitchen Sinkd;1;0S;20;{{0, 0}, {400, 379}}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;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;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;E;E;S;6;normalS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{53, 20}, {103, 25}}S;19;{{0, 0}, {103, 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;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;442E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;330E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;1;4d;2;-1S;11;Push Buttond;2;14S;21;{{51, 61}, {106, 25}}S;19;{{0, 0}, {106, 25}}S;36;bordered+controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;15;Gradient ButtonS;22;{{20, 100}, {168, 25}}S;19;{{0, 0}, {168, 25}}D;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;513E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;17;Round Rect ButtonS;22;{{16, 135}, {176, 22}}S;19;{{0, 0}, {176, 22}}S;9;textfieldS;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;442E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;463E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;777E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;778E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;E;S;11;PlaceholderS;22;{{16, 176}, {176, 22}}S;35;bezeled+controlSizeRegular+editableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;Text FieldS;22;{{16, 216}, {176, 32}}S;19;{{0, 0}, {176, 32}}S;11;searchfieldS;55;bezeled+controlSizeRegular+editable+placeholder+roundedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;Search...d;3;254S;22;{{16, 254}, {176, 22}}S;10;tokenfieldD;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;S;11;Token FieldS;22;{{16, 294}, {176, 26}}S;19;{{0, 0}, {176, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;17;Combo PlaceholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;779E;D;K;6;CP$UIDd;3;780E;E;E;d;1;5S;22;{{212, 17}, {161, 29}}S;19;{{0, 0}, {161, 29}}D;K;6;$classD;K;6;CP$UIDd;3;463E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;781E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;778E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;442E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;497E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;425E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;497E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;497E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;783E;E;S;21;{{209, 62}, {60, 21}}S;18;{{0, 0}, {60, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;2;OnS;23;{{212, 100}, {161, 25}}S;19;{{0, 0}, {161, 25}}S;12;popup-buttonD;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;12S;6;Item 1S;17;_popUpItemAction:S;6;Item 2S;6;Item 3S;21;{{212, 138}, {2, 25}}S;17;{{0, 0}, {2, 25}}S;17;segmented-controlS;18;controlSizeRegularD;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;3;785E;D;K;6;CP$UIDd;3;786E;D;K;6;CP$UIDd;3;787E;E;E;S;23;{{212, 179}, {161, 44}}S;19;{{0, 0}, {161, 44}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;789E;D;K;6;CP$UIDd;3;790E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{212, 257}, {161, 18}}S;19;{{0, 0}, {161, 18}}S;15;level-indicatorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{212, 295}, {136, 21}}S;19;{{0, 0}, {136, 21}}S;6;sliderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;50d;3;100S;22;{{356, 295}, {17, 60}}S;18;{{0, 0}, {17, 60}}S;27;controlSizeRegular+verticalD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{210, 317}, {30, 32}}S;18;{{0, 0}, {30, 32}}S;36;circular+controlSizeRegular+verticalD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{20, 333}, {168, 20}}S;19;{{0, 0}, {168, 20}}S;18;progress-indicatorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{263, 62}, {74, 21}}S;18;{{0, 0}, {74, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;3;OffS;21;{{317, 62}, {67, 21}}S;18;{{0, 0}, {67, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;BothS;36;31335BF5-06C2-4494-957E-17ECA44216CDD;K;10;$classnameS;19;CPMutableDictionaryK;8;$classesA;S;19;CPMutableDictionaryS;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;559E;K;10;CP.objectsD;K;23;CPToolbarShowColorsItemD;K;6;CP$UIDd;3;173E;K;18;CPToolbarSpaceItemD;K;6;CP$UIDd;3;175E;K;36;244A013B-F872-4F2A-8B72-516062AA8096D;K;6;CP$UIDd;3;178E;K;26;CPToolbarFlexibleSpaceItemD;K;6;CP$UIDd;3;177E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;CPToolbarShowColorsItemS;6;ColorsS;16;Show Color PanelS;21;orderFrontColorPanel:D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;568E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;791E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;792E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;793E;E;S;6;{0, 0}S;36;244A013B-F872-4F2A-8B72-516062AA8096S;6;SearchS;8;{96, 32}S;20;{{-4, 7}, {104, 32}}S;19;{{0, 0}, {104, 32}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{500, 89}, {400, 379}}S;8;DisabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;185E;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;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;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;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;36;bordered+controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;45;bordered+controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;775E;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;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;513E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;776E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;56;bezeled+controlSizeRegular+disabled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;44;bezeled+controlSizeRegular+disabled+editableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;64;bezeled+controlSizeRegular+disabled+editable+placeholder+roundedD;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;S;72;bezeled+button-bordered+controlSizeRegular+disabled+editable+placeholderD;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;3;779E;D;K;6;CP$UIDd;3;780E;E;E;S;44;bezeled+bordered+controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;497E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;497E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;782E;E;D;K;6;$classD;K;6;CP$UIDd;3;497E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;783E;E;S;36;controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;775E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;controlSizeRegular+disabledD;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;3;794E;D;K;6;CP$UIDd;3;795E;D;K;6;CP$UIDd;3;796E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;797E;D;K;6;CP$UIDd;3;798E;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;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;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;6;$classD;K;6;CP$UIDd;3;559E;K;10;CP.objectsD;K;23;CPToolbarShowColorsItemD;K;6;CP$UIDd;3;206E;K;18;CPToolbarSpaceItemD;K;6;CP$UIDd;3;207E;K;36;244A013B-F872-4F2A-8B72-516062AA8096D;K;6;CP$UIDd;3;209E;K;26;CPToolbarFlexibleSpaceItemD;K;6;CP$UIDd;3;208E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;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;S;13;AppControllerS;32;{10000000000000, 10000000000000}d;10;1613235200S;23;{{950, 89}, {400, 379}}d;2;15D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;215E;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;3;217E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;256E;E;E;d;2;18S;9;splitviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{0, 254}, {400, 125}}S;20;{{0, 0}, {400, 125}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;644E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;646E;E;E;d;1;8S;10;scrollviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;799E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;800E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;801E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;802E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;229E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;217E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;804E;E;S;20;{{1, 1}, {398, 124}}S;20;{{0, 0}, {398, 124}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;221E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;20;{{0, 0}, {398, 107}}S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;463E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;805E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;778E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;658E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;806E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;806E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;807E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;808E;E;d;3;116d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;663E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;809E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;810E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;6;$afontD;K;6;CP$UIDd;3;811E;K;12;$atext-colorD;K;6;CP$UIDd;3;812E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;813E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;814E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;815E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;816E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;817E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;818E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;492E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;441E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;332E;E;d;3;276D;K;6;$classD;K;6;CP$UIDd;3;663E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;819E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;810E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;6;$afontD;K;6;CP$UIDd;3;811E;K;12;$atext-colorD;K;6;CP$UIDd;3;812E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;820E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;821E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;815E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;822E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;817E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;818E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;492E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;441E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;332E;E;S;20;{{1, -9}, {223, 15}}S;19;{{0, 0}, {223, 15}}d;11;-2147483648S;8;scrollerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;_horizontalScrollerDidScroll:S;21;{{224, 6}, {15, 102}}S;19;{{0, 0}, {15, 102}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;_verticalScrollerDidScroll:f;18;0.8794326241134752S;19;{{0, 0}, {398, 25}}S;14;tableHeaderRowD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{0, 138}, {400, 107}}S;20;{{0, 0}, {400, 107}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;232E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;CPViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;690E;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;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;232E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;232E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;823E;E;S;20;{{1, 1}, {398, 105}}S;20;{{0, 0}, {398, 105}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;235E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;463E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;824E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;778E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;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;3;826E;E;E;d;2;34S;11;rule-editorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;75S;7;rowTypeS;8;criteriaS;13;displayValuesS;10;boundArrayS;7;subrowsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;33;_CPRuleEditorViewUnboundRowHolderK;8;$classesA;S;33;_CPRuleEditorViewUnboundRowHolderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;707E;K;12;CPBoundArrayD;K;6;CP$UIDd;3;827E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;243E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;828E;D;K;6;CP$UIDd;3;829E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;240E;E;E;S;3;AnyS;3;AllD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;242E;E;E;S;25;of the following are trued;3;700D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;830E;D;K;6;CP$UIDd;3;831E;D;K;6;CP$UIDd;3;832E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;E;E;S;4;nameD;K;10;$classnameS;20;_CPKeyPathExpressionK;8;$classesA;S;20;_CPKeyPathExpressionS;21;_CPFunctionExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;720E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;833E;K;11;CPArgumentsD;K;6;CP$UIDd;3;834E;K;9;CPOperandD;K;6;CP$UIDd;3;836E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;S;7;addressD;K;6;$classD;K;6;CP$UIDd;3;720E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;833E;K;11;CPArgumentsD;K;6;CP$UIDd;3;837E;K;9;CPOperandD;K;6;CP$UIDd;3;836E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;S;4;signD;K;6;$classD;K;6;CP$UIDd;3;720E;K;14;CPSelectorNameD;K;6;CP$UIDd;3;833E;K;11;CPArgumentsD;K;6;CP$UIDd;3;838E;K;9;CPOperandD;K;6;CP$UIDd;3;836E;K;16;CPExpressionTypeD;K;6;CP$UIDd;3;379E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;E;E;S;8;containsd;2;99S;11;begins withS;9;ends withd;1;9S;2;isS;6;is notS;24;{{-100, 192}, {360, 15}}S;19;{{0, 0}, {360, 15}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{463, 33}, {15, 73}}S;18;{{0, 0}, {15, 73}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;20;{{0, 0}, {400, 129}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;743E;D;K;6;CP$UIDd;3;262E;D;K;6;CP$UIDd;3;263E;D;K;6;CP$UIDd;3;744E;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;3;218E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;839E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;800E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;840E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;641E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;841E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;256E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;256E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;842E;E;S;20;{{1, 1}, {398, 128}}S;20;{{0, 0}, {398, 128}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;259E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;20;{{0, 0}, {398, 111}}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;3;260E;D;K;6;CP$UIDd;3;261E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;658E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;806E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;806E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;807E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;843E;E;d;2;16d;3;101D;K;6;$classD;K;6;CP$UIDd;3;663E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;844E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;810E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;6;$afontD;K;6;CP$UIDd;3;811E;K;12;$atext-colorD;K;6;CP$UIDd;3;812E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;845E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;331E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;815E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;846E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;817E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;818E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;492E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;441E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;332E;E;d;3;291D;K;6;$classD;K;6;CP$UIDd;3;663E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;847E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;810E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;6;$afontD;K;6;CP$UIDd;3;811E;K;12;$atext-colorD;K;6;CP$UIDd;3;812E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;848E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;331E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;811E;E;D;K;6;$classD;K;6;CP$UIDd;3;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;803E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;803E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;815E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;849E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;817E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;818E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;332E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;492E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;441E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;332E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;332E;E;S;20;{{1, -5}, {223, 15}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{224, 10}, {15, 102}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;f;18;0.8827586206896552D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;19;CPMutableDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;E;E;S;28;_CPFontSystemFacePlaceholderS;5;imageD;K;10;$classnameS;6;CPNullK;8;$classesA;S;6;CPNullS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;772E;E;S;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;850E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;851E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;850E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;513E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;E;E;S;5;colorS;7;Combo 1S;7;Combo 2D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;D;K;6;CP$UIDd;3;373E;E;E;d;15;-62135510400000d;14;64092297600000D;K;10;$classnameS;14;_CPSegmentItemK;8;$classesA;S;14;_CPSegmentItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;784E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;852E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;784E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;853E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;330E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;373E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;784E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;854E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;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;788E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;373E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;855E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;855E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;856E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;857E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;858E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;859E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;860E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;861E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;862E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;864E;E;D;K;6;$classD;K;6;CP$UIDd;3;788E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;865E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;855E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;856E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;857E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;866E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;867E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;868E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;861E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;862E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;864E;E;S;7;CPImageS;21;CPImageNameColorPanelD;K;6;$classD;K;6;CP$UIDd;3;316E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;331E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;331E;K;4;sizeD;K;6;CP$UIDd;3;870E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;784E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;852E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;784E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;853E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;330E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;373E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;784E;K;21;CPSegmentItemImageKeyD;K;6;CP$UIDd;1;0E;K;21;CPSegmentItemLabelKeyD;K;6;CP$UIDd;3;854E;K;20;CPSegmentItemMenuKeyD;K;6;CP$UIDd;1;0E;K;24;CPSegmentItemSelectedKeyD;K;6;CP$UIDd;3;332E;K;23;CPSegmentItemEnabledKeyD;K;6;CP$UIDd;3;330E;K;19;CPSegmentItemTagKeyD;K;6;CP$UIDd;3;425E;K;21;CPSegmentItemWidthKeyD;K;6;CP$UIDd;3;425E;E;D;K;6;$classD;K;6;CP$UIDd;3;788E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;373E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;855E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;855E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;856E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;857E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;871E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;872E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;373E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;860E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;861E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;862E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;873E;E;D;K;6;$classD;K;6;CP$UIDd;3;788E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;197E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;865E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;855E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;197E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;856E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;857E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;874E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;376E;K;6;$afontD;K;6;CP$UIDd;3;461E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;425E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;875E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;868E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;373E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;373E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;861E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;862E;K;20;CPRadioRadioGroupKeyD;K;6;CP$UIDd;3;873E;E;S;21;{{1, 108}, {398, 17}}S;19;{{0, 0}, {398, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;229E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;16;{{0, 0}, {0, 0}}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;3;876E;D;K;6;CP$UIDd;3;876E;D;K;6;CP$UIDd;3;876E;D;K;6;CP$UIDd;3;373E;E;E;S;18;{{0, 0}, {14, 25}}S;10;cornerviewD;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;3;878E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;513E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;330E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;463E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;879E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;778E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;AnimalS;41;controlSizeRegular+editable+tableDataViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;Text Celld;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;880E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;LegsD;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;D;K;6;CP$UIDd;3;881E;D;K;6;CP$UIDd;3;881E;D;K;6;CP$UIDd;3;881E;D;K;6;CP$UIDd;3;373E;E;E;D;K;10;$classnameS;28;_CPRuleEditorViewSliceHolderK;8;$classesA;S;28;_CPRuleEditorViewSliceHolderS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;825E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;235E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;692E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;692E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;235E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;882E;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;3;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;238E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;883E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;884E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;435E;K;6;$afontD;K;6;CP$UIDd;3;885E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;7;$aimageD;K;6;CP$UIDd;3;886E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;887E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;241E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;888E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;889E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;435E;K;6;$afontD;K;6;CP$UIDd;3;890E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;7;$aimageD;K;6;CP$UIDd;3;891E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;892E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;244E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;893E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;894E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;435E;K;6;$afontD;K;6;CP$UIDd;3;895E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;7;$aimageD;K;6;CP$UIDd;3;896E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;897E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;152E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;248E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;898E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;899E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;510E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;435E;K;6;$afontD;K;6;CP$UIDd;3;900E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;441E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;7;$aimageD;K;6;CP$UIDd;3;901E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;902E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;425E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;332E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;444E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;425E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;330E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;376E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;425E;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;139E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;425E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;903E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;904E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;459E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;905E;K;6;$afontD;K;6;CP$UIDd;3;906E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;376E;K;11;$aalignmentD;K;6;CP$UIDd;3;425E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;907E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;330E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;331E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;441E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;373E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;442E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;330E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;330E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;464E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;376E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;425E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;330E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;332E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;330E;E;S;12;valueForKey:D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;909E;E;E;D;K;10;$classnameS;17;_CPSelfExpressionK;8;$classesA;S;17;_CPSelfExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;835E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;910E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;911E;E;E;S;21;{{1, 112}, {398, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;264E;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;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;3;912E;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;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;913E;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;S;18;.AppleSystemUIFontd;2;13S;9;Segment 1S;2;s2S;2;s3S;19;{{0, 0}, {161, 21}}D;K;6;$classD;K;6;CP$UIDd;3;463E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;914E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;778E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;E;S;5;radioS;46;bordered+controlSizeRegular+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;Choice 1f;3;0.5f;4;0.05D;K;10;$classnameS;12;CPRadioGroupK;8;$classesA;S;12;CPRadioGroupS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;863E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;915E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;789E;E;S;20;{{0, 23}, {161, 21}}S;37;bordered+controlSizeRegular+roundRectD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;Radio 2D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;869E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;916E;E;S;55;bordered+controlSizeRegular+disabled+roundRect+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;863E;K;21;CPRadioGroupRadiosKeyD;K;6;CP$UIDd;3;917E;K;28;CPRadioGroupSelectedRadioKeyD;K;6;CP$UIDd;3;797E;E;S;46;bordered+controlSizeRegular+disabled+roundRectD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;f;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;877E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;664E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;918E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;919E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;664E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;920E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;921E;D;K;6;CP$UIDd;3;921E;D;K;6;CP$UIDd;3;921E;D;K;6;CP$UIDd;3;373E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;877E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;667E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;918E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;919E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;667E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;922E;E;f;12;0.9100000262D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;18;{{9, 2}, {54, 25}}S;18;{{0, 0}, {54, 25}}D;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;923E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;924E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;20;{{74, 2}, {160, 25}}S;19;{{0, 0}, {160, 25}}D;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;923E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;924E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;19;{{39, 2}, {76, 25}}S;18;{{0, 0}, {76, 25}}D;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;923E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;924E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;20;{{126, 2}, {95, 25}}S;18;{{0, 0}, {95, 25}}D;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;923E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;3;438E;K;4;nameD;K;6;CP$UIDd;3;771E;K;12;defaultValueD;K;6;CP$UIDd;3;773E;K;5;stateD;K;6;CP$UIDd;3;774E;K;5;valueD;K;6;CP$UIDd;3;924E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{227, 0}, {125, 25}}S;19;{{0, 0}, {125, 25}}S;45;bezeled+controlSizeSmall+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;770E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;923E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;26;_CPConstantValueExpressionK;8;$classesA;S;26;_CPConstantValueExpressionS;12;CPExpressionS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;908E;K;15;CPConstantValueD;K;6;CP$UIDd;3;719E;E;D;K;6;$classD;K;6;CP$UIDd;3;908E;K;15;CPConstantValueD;K;6;CP$UIDd;3;722E;E;D;K;6;$classD;K;6;CP$UIDd;3;908E;K;15;CPConstantValueD;K;6;CP$UIDd;3;724E;E;D;K;6;$classD;K;6;CP$UIDd;3;877E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;755E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;918E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;919E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;755E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;925E;E;D;K;6;$classD;K;6;CP$UIDd;3;877E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;758E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;918E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;919E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;758E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;635E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;428E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;429E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;332E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;926E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;D;K;6;CP$UIDd;3;425E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;789E;D;K;6;CP$UIDd;3;790E;E;E;S;22;{"width":0,"height":0}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;797E;D;K;6;CP$UIDd;3;798E;E;E;S;18;{{5, 0}, {-10, 0}}S;18;{{0, 0}, {-10, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;f;18;0.5019607843137255D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;11D;K;6;$classD;K;6;CP$UIDd;3;436E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;850E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;923E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;332E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;332E;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;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib b/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib index 1ca3a9d40..1726bbf2a 100644 --- a/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib +++ b/Tests/Manual/ThemeKitchenSink/Resources/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -11,7 +11,7 @@ - + @@ -279,11 +279,11 @@ - - + + - + @@ -328,7 +328,7 @@ - + @@ -366,27 +366,7 @@ - - -VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ -y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ -5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g -8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ -AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg -DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ -HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g -KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ -OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg -Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ -VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg -Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ -cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg -f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA -AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA -AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA -AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - + @@ -405,7 +385,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -418,7 +398,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -428,10 +408,10 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + - + @@ -468,7 +448,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -521,14 +501,15 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + - - + + - + @@ -573,7 +554,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -611,27 +592,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - -VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ -y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ -5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g -8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ -AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg -DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ -HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g -KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ -OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg -Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ -VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg -Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ -cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg -f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA -AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA -AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA -AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - + @@ -650,7 +611,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -663,7 +624,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -673,10 +634,10 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + - + @@ -713,7 +674,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -766,6 +727,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + @@ -780,29 +742,29 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - + + - + - + - + - + - + - + @@ -821,7 +783,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -846,28 +808,28 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - - + - + - + - + @@ -952,7 +914,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -960,17 +922,17 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + - + - + - + @@ -986,7 +948,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - + @@ -1008,12 +970,12 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA - @@ -1026,6 +988,7 @@ AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + diff --git a/Tests/Manual/TrackingArea/AppController.j b/Tests/Manual/TrackingArea/AppController.j new file mode 100644 index 000000000..5c9f6f729 --- /dev/null +++ b/Tests/Manual/TrackingArea/AppController.j @@ -0,0 +1,699 @@ +/* + * AppController.j + * TrackingArea + * + * Created by Didier Korthoudt on November 2, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import +@import + +@class SensibleView; +@class SensibleViewTA; +@class SensibleViewAutoTA; +@class SensibleViewWithoutCursorUpdate; + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; + + SensibleView v1; + SensibleView v2; + SensibleView v3; + SensibleView v4; + SensibleView v5; + SensibleView v6; + SensibleView v7; + SensibleView v8; + SensibleView v9; + SensibleView v10; + SensibleViewWithoutCursorUpdate v11; + SensibleView v12; + + SensibleViewTA w2; + SensibleView w3; + SensibleViewAutoTA w4; + SensibleView w5; + SensibleView w6; + SensibleView w7; + + @outlet SensibleView s1; + + SensibleView cursorCapturingView; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. + + var message = [[CPAlert alloc] init]; + + [message setMessageText:@"CPTrackingArea test application"]; + [message setInformativeText:@"Play with various cases, try to drag mouse, observe events in the console, ..."]; + [message setDelegate:self]; + [message setAlertStyle:CPInformationalAlertStyle]; + + [message addButtonWithTitle:@"OK"]; + + [message beginSheetModalForWindow:theWindow modalDelegate:nil didEndSelector:nil contextInfo:nil]; +} + +- (void)awakeFromCib +{ + // 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. + + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullPlatformWindow:YES]; + + var p = [theWindow contentView]; + + // No tracking area + + v1 = [[SensibleView alloc] initWithFrame:CGRectMake(30, 10, 50, 50)]; + + [v1 setViewName:@"no_tracking_area"]; + [v1 setViewColor:[CPColor greenColor]]; + [v1 setViewCursor:[CPCursor crosshairCursor]]; + + [p addSubview:v1]; + + [self addLabel:@"No tracking area" forView:v1]; + + // CPTrackingMouseEnteredAndExited + + v2 = [[SensibleView alloc] initWithFrame:CGRectMake(160, 10, 50, 50)]; + + [v2 setViewName:@"CPTrackingMouseEnteredAndExited"]; + [v2 setViewColor:[CPColor greenColor]]; + [v2 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v2 + userInfo:nil]; + + [v2 addTrackingArea:t]; + + [p addSubview:v2]; + + [self addLabel:@"MouseEnteredAndExited\nInVisibleRect" forView:v2]; + + // CPTrackingCursorUpdate + + v3 = [[SensibleView alloc] initWithFrame:CGRectMake(290, 10, 50, 50)]; + + [v3 setViewName:@"CPTrackingCursorUpdate"]; + [v3 setViewColor:[CPColor greenColor]]; + [v3 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v3 + userInfo:nil]; + + [v3 addTrackingArea:t]; + + [p addSubview:v3]; + + [self addLabel:@"CursorUpdate\nInVisibleRect" forView:v3]; + + // CPTrackingMouseMoved + + v4 = [[SensibleView alloc] initWithFrame:CGRectMake(420, 10, 50, 50)]; + + [v4 setViewName:@"CPTrackingMouseMoved"]; + [v4 setViewColor:[CPColor greenColor]]; + [v4 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseMoved | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v4 + userInfo:nil]; + + [v4 addTrackingArea:t]; + + [p addSubview:v4]; + + [self addLabel:@"MouseMoved\nInVisibleRect" forView:v4]; + + // CPTrackingMouseEnteredAndExited & CPTrackingCursorUpdate + + v5 = [[SensibleView alloc] initWithFrame:CGRectMake(550, 10, 50, 50)]; + + [v5 setViewName:@"CPTrackingMouseEnteredAndExited+CPTrackingCursorUpdate"]; + [v5 setViewColor:[CPColor greenColor]]; + [v5 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v5 + userInfo:nil]; + + [v5 addTrackingArea:t]; + + [p addSubview:v5]; + + [self addLabel:@"MouseEnteredAndExited\nCursorUpdate\nInVisibleRect" forView:v5]; + + // CPTrackingMouseMoved & CPTrackingCursorUpdate + + v6 = [[SensibleView alloc] initWithFrame:CGRectMake(680, 10, 50, 50)]; + + [v6 setViewName:@"CPTrackingMouseMoved+CPTrackingCursorUpdate"]; + [v6 setViewColor:[CPColor greenColor]]; + [v6 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v6 + userInfo:nil]; + + [v6 addTrackingArea:t]; + + [p addSubview:v6]; + + [self addLabel:@"MouseMoved\nCursorUpdate\nInVisibleRect" forView:v6]; + + // CPTrackingMouseEnteredAndExited & CPTrackingMouseMoved + + v7 = [[SensibleView alloc] initWithFrame:CGRectMake(810, 10, 50, 50)]; + + [v7 setViewName:@"CPTrackingMouseEnteredAndExited+CPTrackingMouseMoved"]; + [v7 setViewColor:[CPColor greenColor]]; + [v7 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v7 + userInfo:nil]; + + [v7 addTrackingArea:t]; + + [p addSubview:v7]; + + [self addLabel:@"MouseEnteredAndExited\nMouseMoved\nInVisibleRect" forView:v7]; + + // CPTrackingMouseEnteredAndExited & CPTrackingMouseMoved & CPTrackingCursorUpdate + + v8 = [[SensibleView alloc] initWithFrame:CGRectMake(940, 10, 50, 50)]; + + [v8 setViewName:@"CPTrackingMouseEnteredAndExited+CPTrackingMouseMoved+CPTrackingCursorUpdate"]; + [v8 setViewColor:[CPColor greenColor]]; + [v8 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v8 + userInfo:nil]; + + [v8 addTrackingArea:t]; + + [p addSubview:v8]; + + [self addLabel:@"MouseEnteredAndExited\nMouseMoved\nCursorUpdate\nInVisibleRect" forView:v8]; + + // nested views, superview implements cursorUpdate but does nothing + + v9 = [[SensibleView alloc] initWithFrame:CGRectMake(1070, 10, 50, 50)]; + + [v9 setViewName:@"Superview with cursorUpdate but doing nothing"]; + [v9 setViewColor:[CPColor greenColor]]; + [v9 setViewCursor:nil]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v9 + userInfo:nil]; + + [v9 addTrackingArea:t]; + + [p addSubview:v9]; + + [self addLabel:@"Outer view implements\ncursorUpdate but does nothing.\nInner view implements\ncursorUpdate" forView:v9]; + + v10 = [[SensibleView alloc] initWithFrame:CGRectMake(10, 10, 30, 30)]; + + [v10 setViewName:@"Subview with cursorUpdate"]; + [v10 setViewColor:[CPColor blueColor]]; + [v10 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v10 + userInfo:nil]; + + [v10 addTrackingArea:t]; + + [v9 addSubview:v10]; + + // nested views, superview doesn't implement cursorUpdate but requests it + + v11 = [[SensibleViewWithoutCursorUpdate alloc] initWithFrame:CGRectMake(1200, 10, 50, 50)]; + + [v11 setViewName:@"Superview without cursorUpdate"]; + [v11 setViewColor:[CPColor greenColor]]; + [v11 setViewCursor:[CPCursor pointingHandCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v11 + userInfo:nil]; + + [v11 addTrackingArea:t]; + + [p addSubview:v11]; + + [self addLabel:@"Outer view doesn't implement\ncursorUpdate but requests it.\nInner view implements\ncursorUpdate" forView:v11]; + + v12 = [[SensibleView alloc] initWithFrame:CGRectMake(10, 10, 30, 30)]; + + [v12 setViewName:@"Subview with cursorUpdate"]; + [v12 setViewColor:[CPColor blueColor]]; + [v12 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v12 + userInfo:nil]; + + [v12 addTrackingArea:t]; + + [v11 addSubview:v12]; + + // Not CPTrackingInVisibleRect + + w2 = [[SensibleViewTA alloc] initWithFrame:CGRectMake(160, 110, 50, 50)]; + + [w2 setViewName:@"Not CPTrackingInVisibleRect"]; + [w2 setViewColor:[CPColor greenColor]]; + [w2 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMake(0, 0, 25, 25) + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow + owner:w2 + userInfo:nil]; + + [w2 addTrackingArea:t]; + + [p addSubview:w2]; + + [self addLabel:@"MouseEnteredAndExited\n(top-left quarter is the active area)" forView:w2]; + + // CPTrackingEnabledDuringMouseDrag + + w3 = [[SensibleView alloc] initWithFrame:CGRectMake(290, 110, 50, 50)]; + + [w3 setViewName:@"CPTrackingEnabledDuringMouseDrag"]; + [w3 setViewColor:[CPColor greenColor]]; + [w3 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect | CPTrackingEnabledDuringMouseDrag + owner:w3 + userInfo:nil]; + + [w3 addTrackingArea:t]; + + [p addSubview:w3]; + + [self addLabel:@"MouseEnteredAndExited\nInVisibleRect\nEnabledDuringMouseDrag" forView:w3]; + + // View in CPScrollView + + [s1 setViewName:@"View in CPScrollView"]; + [s1 setViewColor:[CPColor greenColor]]; + [s1 setViewCursor:[CPCursor crosshairCursor]]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:s1 + userInfo:nil]; + + [s1 addTrackingArea:t]; + + // No itinial TA + + w4 = [[SensibleViewAutoTA alloc] initWithFrame:CGRectMake(420, 110, 50, 50)]; + + [w4 setViewName:@"No itinial TA"]; + [w4 setViewColor:[CPColor greenColor]]; + [w4 setViewCursor:[CPCursor crosshairCursor]]; + + [p addSubview:w4]; + + [self addLabel:@"This one has no initial\ntracking area but\nuses updateTrackingAreas to\nattach one" forView:w4]; + + // Two views with tracking areas where the owner is not the view itself + + w5 = [[SensibleView alloc] initWithFrame:CGRectMake(550, 110, 50, 50)]; + + [w5 setViewName:@"firstView"]; + [w5 setViewColor:[CPColor greenColor]]; + [w5 setViewCursor:[CPCursor crosshairCursor]]; + + [p addSubview:w5]; + + [self addLabel:@"(firstView)\nThis view has a tracking area\nowned by the blue view" forView:w5]; + + w6 = [[SensibleView alloc] initWithFrame:CGRectMake(680, 110, 50, 50)]; + + [w6 setViewName:@"secondView"]; + [w6 setViewColor:[CPColor greenColor]]; + [w6 setViewCursor:[CPCursor crosshairCursor]]; + + [p addSubview:w6]; + + [self addLabel:@"(secondView)\nThis view has a tracking area\nowned by the blue view" forView:w6]; + + w7 = [[SensibleView alloc] initWithFrame:CGRectMake(810, 110, 50, 50)]; + + [w7 setViewName:@"masterView"]; + [w7 setViewColor:[CPColor blueColor]]; + [w7 setViewCursor:[CPCursor crosshairCursor]]; + + [p addSubview:w7]; + + [self addLabel:@"I'm the owner of the\ntracking areas of\nthe 2 views on my left" forView:w7]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:w7 + userInfo:@{ @"trigger": @"View 1" } ]; + + [w5 addTrackingArea:t]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:w7 + userInfo:@{ @"trigger": @"View 2" } ]; + + [w6 addTrackingArea:t]; + + + // Cursor update complex test + + for (var i = 0; i < 10; i++) + { + var v = [[SensibleView alloc] initWithFrame:CGRectMake((i == 0 ? 50 : 20), (i == 0 ? 240 : 20), 400-(i*40), 400-(i*40))]; + + [p addSubview:v]; + p = v; + + [v setViewName:[CPString stringWithFormat:@"v%d",i]]; + + var c = [CPColor colorWithHexString:[CPString stringWithFormat:@"%d%d%d%d%d%d",i,i,i,i,i,i]]; + + [v setViewColor:c]; + + switch (i) + { + case 0: [v setViewCursor:[CPCursor crosshairCursor]]; break; + case 1: [v setViewCursor:[CPCursor pointingHandCursor]]; break; + case 2: [v setViewCursor:[CPCursor resizeNorthwestCursor]]; break; + case 3: [v setViewCursor:[CPCursor IBeamCursor]]; break; + case 4: [v setViewCursor:[CPCursor dragCopyCursor]]; break; + case 5: [v setViewCursor:[CPCursor dragLinkCursor]]; break; + case 6: [v setViewCursor:[CPCursor contextualMenuCursor]]; break; + case 7: [v setViewCursor:[CPCursor openHandCursor]]; break; + case 8: [v setViewCursor:[CPCursor closedHandCursor]]; break; + case 9: [v setViewCursor:[CPCursor resizeNorthSouthCursor]]; break; + } + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect | CPTrackingEnabledDuringMouseDrag + owner:v + userInfo:nil]; + [v addTrackingArea:t]; + } + + + var p = [theWindow contentView]; + + for (var i = 0; i < 10; i++) + { + var v = [[SensibleView alloc] initWithFrame:CGRectMake((i == 0 ? 460 : 0), (i == 0 ? 240 : 0), 400-(i*40), 400-(i*40))]; + + [p addSubview:v]; + p = v; + + [v setViewName:[CPString stringWithFormat:@"v%d",i]]; + + var c = [CPColor colorWithHexString:[CPString stringWithFormat:@"%d%d%d%d%d%d",i,i,i,i,i,i]]; + + [v setViewColor:c]; + + switch (i) + { + case 0: [v setViewCursor:[CPCursor crosshairCursor]]; break; + case 1: [v setViewCursor:[CPCursor pointingHandCursor]]; break; + case 2: [v setViewCursor:[CPCursor resizeNorthwestCursor]]; break; + case 3: [v setViewCursor:[CPCursor IBeamCursor]]; break; + case 4: [v setViewCursor:[CPCursor dragCopyCursor]]; break; + case 5: [v setViewCursor:[CPCursor dragLinkCursor]]; break; + case 6: [v setViewCursor:[CPCursor contextualMenuCursor]]; break; + case 7: [v setViewCursor:[CPCursor openHandCursor]]; break; + case 8: [v setViewCursor:[CPCursor closedHandCursor]]; break; + case 9: [v setViewCursor:[CPCursor resizeNorthSouthCursor]]; break; + } + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:v + userInfo:nil]; + [v addTrackingArea:t]; + } + + var item = [CPButton buttonWithTitle:@"Add a view that catches cursor updates but not mouse entered/exited events"]; + + [item setTarget:self]; + [item setAction:@selector(showHideView:)]; + [item setCenter:CGPointMake(455, 660)]; + + [[theWindow contentView] addSubview:item]; +} + +- (void)showHideView:(id)aSender +{ + if (!cursorCapturingView) + { + cursorCapturingView = [[SensibleView alloc] initWithFrame:CGRectMake(250, 440, 410, 200)]; + + [cursorCapturingView setViewColor:[CPColor colorWithHexString:@"c8d3b2"]]; + [cursorCapturingView setViewName:@"cursorCapturingView"]; + [cursorCapturingView setViewCursor:[CPCursor disappearingItemCursor]]; + + [cursorCapturingView setAlphaValue:0.7]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:cursorCapturingView + userInfo:nil]; + [cursorCapturingView addTrackingArea:t]; + + + [[theWindow contentView] addSubview:cursorCapturingView]; + + [aSender setTitle:@"Hide the view catching cursor updates but not mouse entered/exited events"]; + } + else if ([cursorCapturingView isHidden]) + { + [cursorCapturingView setHidden:NO]; + + [aSender setTitle:@"Hide the view catching cursor updates but not mouse entered/exited events"]; + } + else + { + [cursorCapturingView setHidden:YES]; + + [aSender setTitle:@"Add a view that catches cursor updates but not mouse entered/exited events"]; + } +} + +- (void)addLabel:(CPString)title forView:(CPView)view +{ + var label = [CPTextField labelWithTitle:title], + labelSize = [label frameSize], + viewFrame = [view frame]; + + [label setFrameOrigin:CGPointMake(viewFrame.origin.x + viewFrame.size.width / 2 - labelSize.width / 2, viewFrame.origin.y + viewFrame.size.height + 4)]; + [label setFont:[CPFont systemFontOfSize:9]]; + [label setAlignment:CPCenterTextAlignment]; + [label setVerticalAlignment:CPTopVerticalTextAlignment]; + + [[view superview] addSubview:label]; +} + +@end + +@implementation SensibleView : CPView +{ + CPString viewName @accessors; + CPCursor viewCursor @accessors; + CPColor viewColor; + CPTextField coords; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + + if (self) + { + coords = [CPTextField labelWithTitle:@"WWWW,WWWW"]; + [coords setFont:[CPFont systemFontOfSize:9]]; + [coords setAlignment:CPCenterTextAlignment]; + [coords setCenter:CGPointMake(25,25)]; + [coords setStringValue:@""]; + + [self addSubview:coords]; + } + + return self; +} + +- (void)mouseEntered:(CPEvent)anEvent +{ + CPLog.trace("mouseEntered @"+viewName); + + [self setBackgroundColor:[CPColor redColor]]; + + var trigger = [[[anEvent trackingArea] userInfo] valueForKey:@"trigger"]; + + if (trigger) + [coords setStringValue:trigger]; +} + +- (void)mouseExited:(CPEvent)anEvent +{ + CPLog.trace("mouseExited @"+viewName); + + [self setBackgroundColor:viewColor]; + + [coords setStringValue:@""]; +} + +- (void)mouseMoved:(CPEvent)anEvent +{ + var l = [anEvent locationInWindow]; + + [coords setStringValue:[CPString stringWithFormat:@"%d,%d",l.x,l.y]]; +} + +- (void)cursorUpdate:(CPEvent)anEvent +{ + CPLog.trace("cursorUpdate @"+viewName); + + if (viewCursor) + [viewCursor set]; +} + +- (void)setViewColor:(CPColor)aColor +{ + viewColor = aColor; + [self setBackgroundColor:aColor]; +} + +@end + +@implementation SensibleViewWithoutCursorUpdate : CPView +{ + CPString viewName @accessors; + CPCursor viewCursor @accessors; + CPColor viewColor; + CPTextField coords; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + + if (self) + { + coords = [CPTextField labelWithTitle:@"WWWW,WWWW"]; + [coords setFont:[CPFont systemFontOfSize:9]]; + [coords setAlignment:CPCenterTextAlignment]; + [coords setCenter:CGPointMake(25,25)]; + [coords setStringValue:@""]; + + [self addSubview:coords]; + } + + return self; +} + +- (void)mouseEntered:(CPEvent)anEvent +{ + CPLog.trace("mouseEntered @"+viewName); + + [self setBackgroundColor:[CPColor redColor]]; + + var trigger = [[[anEvent trackingArea] userInfo] valueForKey:@"trigger"]; + + if (trigger) + [coords setStringValue:trigger]; +} + +- (void)mouseExited:(CPEvent)anEvent +{ + CPLog.trace("mouseExited @"+viewName); + + [self setBackgroundColor:viewColor]; + + [coords setStringValue:@""]; +} + +- (void)mouseMoved:(CPEvent)anEvent +{ + var l = [anEvent locationInWindow]; + + [coords setStringValue:[CPString stringWithFormat:@"%d,%d",l.x,l.y]]; +} + +- (void)setViewColor:(CPColor)aColor +{ + viewColor = aColor; + [self setBackgroundColor:aColor]; +} + +@end + +@implementation SensibleViewTA : SensibleView + +- (void)updateTrackingAreas +{ + CPLog.trace("updateTrackingAreas @"+viewName); + + [self removeAllTrackingAreas]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMake(0, 0, 25, 25) + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow + owner:self + userInfo:nil]; + + [self addTrackingArea:t]; +} + +@end + +@implementation SensibleViewAutoTA : SensibleView + +- (void)updateTrackingAreas +{ + CPLog.trace("updateTrackingAreas @"+viewName); + + [self removeAllTrackingAreas]; + + var t = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() + options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect + owner:self + userInfo:nil]; + + [self addTrackingArea:t]; +} + +@end + diff --git a/Tests/Manual/TrackingArea/Info.plist b/Tests/Manual/TrackingArea/Info.plist new file mode 100644 index 000000000..91b1e76fa --- /dev/null +++ b/Tests/Manual/TrackingArea/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + TrackingArea + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2015, Your Company All rights reserved. + + diff --git a/Tests/Manual/TrackingArea/Jakefile b/Tests/Manual/TrackingArea/Jakefile new file mode 100644 index 000000000..51bb86ba2 --- /dev/null +++ b/Tests/Manual/TrackingArea/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * TrackingArea + * + * Created by You on November 2, 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 = "TrackingArea"; + +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", "TrackingArea.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("TrackingArea"); + task.setIdentifier("com.yourcompany.TrackingArea"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("TrackingArea"); + 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("-O2"); +}); + +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, "TrackingArea.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "TrackingArea.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/TrackingArea/Resources/MainMenu.cib b/Tests/Manual/TrackingArea/Resources/MainMenu.cib new file mode 100644 index 000000000..c9ecff6f4 --- /dev/null +++ b/Tests/Manual/TrackingArea/Resources/MainMenu.cib @@ -0,0 +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;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;3;134E;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;3;139E;D;K;6;CP$UIDd;3;141E;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;152E;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;3;158E;D;K;6;CP$UIDd;3;160E;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;166E;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;63E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;82E;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;3;106E;D;K;6;CP$UIDd;2;82E;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;60E;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;2;60E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;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;132E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;165E;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;167E;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;168E;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;135E;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;135E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;169E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;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;138E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;171E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;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;134E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;173E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;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;136E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;175E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;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;139E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;177E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;178E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;166E;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;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;145E;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;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;128E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;181E;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;24E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;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;24E;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;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;185E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;188E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;189E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;191E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;192E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;195E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;196E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;197E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;198E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;199E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;200E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;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;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;167E;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;215E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;216E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;217E;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;218E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;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;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;218E;K;13;CPMenuNameKeyD;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;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;63E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;224E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;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;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;228E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;224E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;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;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;63E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;229E;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;230E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;2;70E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;70E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;231E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;232E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;234E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;235E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;236E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;237E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;74E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;74E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;237E;K;13;CPMenuNameKeyD;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;61E;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;74E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;224E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;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;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;242E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;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;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;244E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;70E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;246E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;70E;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;2;82E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;82E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;249E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;252E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;254E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;224E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;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;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;258E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;262E;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;82E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;263E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;224E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;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;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;93E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;264E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;267E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;270E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;271E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;273E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;274E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;247E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;276E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;277E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;279E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;100E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;280E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;282E;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;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;283E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;285E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;287E;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;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;288E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;106E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;288E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;290E;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;267E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;268E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;291E;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;270E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;271E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;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;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;273E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;274E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;293E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;111E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;111E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;293E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;295E;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;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;296E;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;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;115E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;115E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;297E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;299E;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;300E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;302E;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;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;303E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;303E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;304E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;306E;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;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;307E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;308E;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;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;224E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;225E;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;226E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;309E;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;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;219E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;125E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;310E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;61E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;312E;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;125E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;313E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;220E;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;314E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;315E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;316E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;317E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;318E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;319E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;303E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;321E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;321E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;322E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPSplitViewK;8;$classesA;S;11;CPSplitViewS;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;325E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;326E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;327E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;329E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;224E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;226E;K;26;CPSplitViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;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;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;330E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;330E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;332E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;333E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;330E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;332E;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;320E;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;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;332E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;336E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;337E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;338E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;329E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;226E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;224E;K;26;CPSplitViewAutosaveNameKeyD;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;137E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;339E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;340E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;137E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;341E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;341E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;137E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;332E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;342E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;343E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;344E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;345E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;143E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;148E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;147E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;346E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;346E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;346E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;346E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;224E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;224E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;226E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;347E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;270E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;320E;E;D;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;141E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;348E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;349E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;350E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;141E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;351E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;353E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;143E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;354E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;355E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;143E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;351E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;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;144E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;356E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;357E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;144E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;358E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;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;3;141E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;359E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;360E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;141E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;361E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;362E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;320E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;141E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;363E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;226E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;267E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;141E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;365E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;366E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;141E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;361E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;362E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;320E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;141E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;367E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;224E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;267E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;368E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;369E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;370E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;345E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;150E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;371E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;158E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;157E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;346E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;346E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;346E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;346E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;224E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;224E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;224E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;372E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;270E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;149E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;373E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;374E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;149E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;351E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;376E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;152E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;151E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;150E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;377E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;150E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;376E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;12;$agrid-colorD;K;6;CP$UIDd;3;379E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;380E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;381E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;320E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;364E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;226E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;224E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;224E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;224E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;224E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;382E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;379E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;320E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;226E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;384E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;160E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;385E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;386E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;387E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;389E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;390E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;273E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;226E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;224E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;391E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;386E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;387E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;392E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;393E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;273E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;226E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;224E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;394E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;346E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;395E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;396E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;397E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;273E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;226E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;224E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;149E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;398E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;399E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;149E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;400E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;361E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;362E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;320E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;149E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;363E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;226E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;267E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;146E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;149E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;401E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;402E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;149E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;400E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;361E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;362E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;320E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;149E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;367E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;224E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;403E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;371E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;404E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;404E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;405E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;152E;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;161E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;406E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;407E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;364E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;320E;K;6;$afontD;K;6;CP$UIDd;3;411E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;412E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;270E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;413E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;226E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;353E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;320E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;364E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;224E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;224E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;3;161E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;414E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;415E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;364E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;320E;K;6;$afontD;K;6;CP$UIDd;3;416E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;417E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;270E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;413E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;226E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;353E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;320E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;364E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;224E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;224E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;3;161E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;418E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;415E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;364E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;320E;K;6;$afontD;K;6;CP$UIDd;3;419E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;420E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;270E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;413E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;226E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;353E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;320E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;364E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;224E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;224E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;3;161E;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;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;421E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;422E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;130E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;328E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;364E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;320E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;424E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;364E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;270E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;413E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;226E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;353E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;320E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;364E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;224E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;224E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;425E;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;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;426E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;427E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;426E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;428E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;426E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;429E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;426E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;430E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;426E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;431E;E;E;S;8;delegateS;2;s1S;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;9;AMainMenuS;11;_CPMainMenuD;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;69E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;124E;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;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;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;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;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;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;75E;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;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;99E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;110E;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;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;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;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;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;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;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;112E;D;K;6;CP$UIDd;3;113E;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;116E;D;K;6;CP$UIDd;3;117E;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;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;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;126E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1881669632S;27;{{119, -560}, {1374, 1031}}S;22;{{0, 0}, {2560, 1417}}d;2;15d;1;0S;22;{{0, 0}, {1374, 1031}}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;137E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;149E;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;E;E;S;6;normalS;6;{1, 1}S;23;{{940, 147}, {214, 73}}S;19;{{0, 0}, {214, 73}}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;E;E;d;2;36S;9;splitviewS;18;{{0, 0}, {59, 73}}d;1;8S;6;CPViewS;19;{{60, 0}, {59, 73}}S;20;{{120, 0}, {94, 73}}S;18;{{0, 0}, {94, 73}}S;24;{{940, 231}, {214, 102}}S;20;{{0, 0}, {214, 102}}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;E;E;S;20;{{0, 57}, {214, 45}}S;19;{{0, 0}, {214, 45}}S;19;{{0, 0}, {214, 48}}S;24;{{940, 355}, {277, 163}}S;20;{{0, 0}, {277, 163}}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;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;347E;E;E;S;10;scrollviewd;2;10D;K;6;$classD;K;6;CP$UIDd;3;129E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;141E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;141E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{1, 1}, {275, 161}}S;20;{{0, 0}, {275, 161}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;144E;E;E;d;2;18D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;433E;E;S;20;{{0, 0}, {290, 346}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;145E;E;E;S;22;{{56, 204}, {163, 96}}S;19;{{0, 0}, {163, 96}}S;12;SensibleViewS;19;{{1, 2}, {275, 15}}S;19;{{0, 0}, {275, 15}}S;8;scrollerS;27;controlSizeRegular+disabledS;29;_horizontalScrollerDidScroll:d;1;4S;21;{{261, 1}, {15, 161}}S;19;{{0, 0}, {15, 161}}S;27;_verticalScrollerDidScroll:S;24;{{940, 535}, {277, 119}}S;20;{{0, 0}, {277, 119}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;372E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;142E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;149E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;434E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;404E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;435E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;149E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;331E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;3;129E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;149E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;149E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;S;20;{{1, 1}, {275, 118}}S;20;{{0, 0}, {275, 118}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;152E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;436E;E;S;19;{{0, 0}, {275, 95}}S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;437E;E;d;2;25S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;383E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;320E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;438E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;438E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;439E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;f;11;78.77734375d;2;40d;4;1000D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;388E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;441E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;364E;K;12;$atext-colorD;K;6;CP$UIDd;3;442E;K;6;$afontD;K;6;CP$UIDd;3;443E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;444E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;443E;E;D;K;6;$classD;K;6;CP$UIDd;3;161E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;445E;K;11;$aalignmentD;K;6;CP$UIDd;3;364E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;364E;K;6;$afontD;K;6;CP$UIDd;3;446E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;447E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;448E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;320E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;413E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;224E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;376E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;364E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;364E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;226E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;226E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;226E;E;f;10;106.203125D;K;6;$classD;K;6;CP$UIDd;3;388E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;449E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;441E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;364E;K;12;$atext-colorD;K;6;CP$UIDd;3;442E;K;6;$afontD;K;6;CP$UIDd;3;443E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;450E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;443E;E;D;K;6;$classD;K;6;CP$UIDd;3;161E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;445E;K;11;$aalignmentD;K;6;CP$UIDd;3;364E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;364E;K;6;$afontD;K;6;CP$UIDd;3;446E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;447E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;448E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;320E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;413E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;224E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;376E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;364E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;364E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;226E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;226E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;226E;E;d;2;81f;22;3.4028234663852886e+38D;K;6;$classD;K;6;CP$UIDd;3;388E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;451E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;441E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;320E;K;12;$atext-colorD;K;6;CP$UIDd;3;442E;K;6;$afontD;K;6;CP$UIDd;3;443E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;452E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;443E;E;D;K;6;$classD;K;6;CP$UIDd;3;161E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;408E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;445E;K;11;$aalignmentD;K;6;CP$UIDd;3;320E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;364E;K;6;$afontD;K;6;CP$UIDd;3;446E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;447E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;448E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;320E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;413E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;224E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;226E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;376E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;364E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;320E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;226E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;226E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;226E;E;S;22;{{1, -127}, {307, 15}}S;19;{{0, 0}, {307, 15}}d;11;-2147483648S;21;{{224, 0}, {15, 102}}S;19;{{0, 0}, {15, 102}}f;18;0.8368794326241135S;19;{{0, 0}, {275, 23}}S;14;tableHeaderRowS;23;{{1225, 535}, {84, 44}}S;18;{{0, 0}, {84, 44}}S;9;textfieldS;15;controlSizeMiniD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;410E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;453E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;454E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;224E;E;S;61;CPTableHeaderView now using tracking areas for cursor updatesd;2;-1S;23;{{1225, 355}, {74, 55}}S;18;{{0, 0}, {74, 55}}D;K;6;$classD;K;6;CP$UIDd;3;410E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;453E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;454E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;224E;E;S;69;CPScrollView (scroll down to view and test a view with tracking area)S;23;{{1162, 156}, {74, 55}}D;K;6;$classD;K;6;CP$UIDd;3;410E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;453E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;454E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;224E;E;S;79;CPSplitView with thin vertical dividers, using tracking area for cursor updatesS;23;{{1162, 262}, {74, 39}}S;18;{{0, 0}, {74, 39}}D;K;6;$classD;K;6;CP$UIDd;3;410E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;453E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;454E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;224E;E;S;42;CPSplitView with thick horizontal dividersS;13;AppControllerS;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;455E;E;D;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;456E;E;D;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;457E;E;D;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;458E;E;D;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;459E;E;S;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;460E;D;K;6;CP$UIDd;3;267E;E;E;S;20;{{1, 96}, {275, 23}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;160E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;D;K;6;CP$UIDd;3;267E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;461E;D;K;6;CP$UIDd;3;267E;E;E;S;18;{{0, 0}, {14, 25}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;463E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;352E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;464E;E;D;K;6;$classD;K;6;CP$UIDd;3;410E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;453E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;465E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;224E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;224E;E;S;5;FirstS;41;controlSizeRegular+editable+tableDataViewD;K;6;$classD;K;6;CP$UIDd;3;410E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;453E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;413E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;226E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;224E;E;S;9;Text Celld;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;466E;E;E;S;6;SecondD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;467E;E;E;S;5;ThirdS;28;_CPFontSystemFacePlaceholderd;1;9D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;468E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;267E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;469E;D;K;6;CP$UIDd;3;470E;D;K;6;CP$UIDd;3;267E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;471E;D;K;6;CP$UIDd;3;320E;D;K;6;CP$UIDd;3;267E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;472E;D;K;6;CP$UIDd;3;473E;D;K;6;CP$UIDd;3;474E;D;K;6;CP$UIDd;3;267E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;475E;D;K;6;CP$UIDd;3;476E;D;K;6;CP$UIDd;3;477E;D;K;6;CP$UIDd;3;267E;E;E;f;18;0.6862745098039216f;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;462E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;389E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;389E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;351E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;480E;D;K;6;CP$UIDd;3;267E;E;E;d;2;12D;K;6;$classD;K;6;CP$UIDd;3;462E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;392E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;392E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;351E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;462E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;396E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;396E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;351E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;323E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;324E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;324E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;f;12;0.5669043624f;12;0.2389628775f;11;0.647965604f;12;0.5314072987f;12;0.5763914944f;12;0.5976963141f;12;0.5329355132f;12;0.4716600252f;12;0.3736891779f;12;0.1722158138S;18;{{5, 0}, {-10, 0}}S;18;{{0, 0}, {-10, 0}}f;18;0.5019607843137255E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/TrackingArea/Resources/MainMenu.xib b/Tests/Manual/TrackingArea/Resources/MainMenu.xib new file mode 100644 index 000000000..5377684fc --- /dev/null +++ b/Tests/Manual/TrackingArea/Resources/MainMenu.xib @@ -0,0 +1,525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/TrackingArea/index-debug.html b/Tests/Manual/TrackingArea/index-debug.html new file mode 100644 index 000000000..ea5f6f364 --- /dev/null +++ b/Tests/Manual/TrackingArea/index-debug.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + TrackingArea + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/TrackingArea/index.html b/Tests/Manual/TrackingArea/index.html new file mode 100644 index 000000000..cc1a78e03 --- /dev/null +++ b/Tests/Manual/TrackingArea/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + TrackingArea + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/TrackingArea/main.j b/Tests/Manual/TrackingArea/main.j new file mode 100644 index 000000000..4cbeeb386 --- /dev/null +++ b/Tests/Manual/TrackingArea/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * TrackingArea + * + * Created by You on November 2, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j b/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j index 99aef883b..7df299459 100644 --- a/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j +++ b/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j @@ -80,4 +80,59 @@ [self assert:-6 equals:[testClass void:10 in:4]]; } +- (void)testMethodName +{ + var method = class_getInstanceMethod(MathClass, @selector(sqrt:)); + + [self assert:method_getName(method) equals:@"sqrt:"]; +} + +- (void)testMethodNoOfArguments +{ + var method = class_getInstanceMethod(MathClass, @selector(five)); + + [self assert:method_getNumberOfArguments(method) equals:2]; + + method = class_getInstanceMethod(MathClass, @selector(multiply:)); + [self assert:method_getNumberOfArguments(method) equals:3]; + + method = class_getInstanceMethod(MathClass, @selector(multiply:with:)); + [self assert:method_getNumberOfArguments(method) equals:4]; +} + +- (void)testMethodTypes +{ + var theClass = objj_allocateClassPair(CPObject, RAND() + ""); + + objj_registerClassPair(theClass); + class_addMethod(theClass, @"myMethod:", function() { }, ["void", "CPNumber"]); + class_addMethod(theClass, @"myMethod2:", function() { }, ["int", "float"]); + class_addMethod(theClass, @"myMethod3:", function() { }); + [theClass new]; + + var method = class_getInstanceMethod(theClass, @selector(myMethod:)); + + [self assert:method_copyReturnType(method) equals:@"void" message:@"Return type of method 'myMethod:'"]; + [self assert:method_copyArgumentType(method, 0) equals:@"id"]; + [self assert:method_copyArgumentType(method, 1) equals:@"SEL"]; + [self assert:method_copyArgumentType(method, 2) equals:@"CPNumber"]; + [self assertTrue:method_copyArgumentType(method, 3) === nil]; + [self assert:method_getNumberOfArguments(method) equals:3]; + + method = class_getInstanceMethod(theClass, @selector(myMethod2:)); + [self assert:method_copyReturnType(method) equals:@"int" message:@"Return type of method 'myMethod2:'"]; + [self assert:method_copyArgumentType(method, 0) equals:@"id"]; + [self assert:method_copyArgumentType(method, 1) equals:@"SEL"]; + [self assert:method_copyArgumentType(method, 2) equals:@"float"]; + [self assertTrue:method_copyArgumentType(method, 3) === nil]; + [self assert:method_getNumberOfArguments(method) equals:3]; + + method = class_getInstanceMethod(theClass, @selector(myMethod3:)); + [self assertTrue:method_copyReturnType(method) == nil]; + [self assert:method_copyArgumentType(method, 0) equals:@"id"]; + [self assert:method_copyArgumentType(method, 1) equals:@"SEL"]; + [self assertTrue:method_copyArgumentType(method, 2) === nil]; + [self assert:method_getNumberOfArguments(method) equals:3]; +} + @end diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js index ae78cbb53..faa0a5474 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js @@ -5,7 +5,7 @@ if(!the_class){ throw new SyntaxError("*** Could not find definition for class \"TestClass\""); } var meta_class=the_class.isa; -class_addIvars(the_class,[new objj_ivar("ivar")]); +class_addIvars(the_class,[new objj_ivar("ivar","Type")]); class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $TestClass__ivar(_1,_2){ return _1.ivar; },["Type"]),new objj_method(sel_getUid("setIvar:"),function $TestClass__setIvar_(_3,_4,_5){ diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js index 8cf16dc3b..622661139 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js @@ -1,6 +1,6 @@ var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; -class_addIvars(the_class,[new objj_ivar("ivar"), new objj_ivar("array"), new objj_ivar("string"), new objj_ivar("integer")]); +class_addIvars(the_class,[new objj_ivar("ivar","Type"), new objj_ivar("array","CPArray"), new objj_ivar("string","CPString"), new objj_ivar("integer","int")]); objj_registerClassPair(the_class); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js index 165c23dc8..a0327a8c8 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js @@ -2,6 +2,6 @@ var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; -class_addIvars(the_class,[new objj_ivar("ivar")]); +class_addIvars(the_class,[new objj_ivar("ivar","Type")]); objj_registerClassPair(the_class); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector-inlined.js new file mode 100644 index 000000000..bae53d471 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector-inlined.js @@ -0,0 +1,2 @@ + +(object==null?null:(object.isa.method_msgSend[":"]||_objj_forward)(object,":",argument)); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver-inlined.js new file mode 100644 index 000000000..b629b2a0b --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver-inlined.js @@ -0,0 +1,2 @@ +var a=0; +((___r1=a++<2?small_target:big_target),___r1==null?null:(___r1.isa.method_msgSend["doStuff"]||_objj_forward)(___r1,"doStuff")); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector-inlined.js new file mode 100644 index 000000000..fe6d6d930 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector-inlined.js @@ -0,0 +1 @@ +(object==null?null:(object.isa.method_msgSend["for:in:nil:"]||_objj_forward)(object,"for:in:nil:",a,b,nil)); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters-inlined.js new file mode 100644 index 000000000..a28089dda --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters-inlined.js @@ -0,0 +1,2 @@ + +(object==null?null:(object.isa.method_msgSend["label:label2:label3:label4:"]||_objj_forward)(object,"label:label2:label3:label4:",argument,argument2,argument3,argument4)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters-inlined.js new file mode 100644 index 000000000..50c8b1a87 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters-inlined.js @@ -0,0 +1,2 @@ +(CPArray.isa.method_msgSend["new"]||_objj_forward)(CPArray,"new"); +(object==null?null:(object.isa.method_msgSend["message"]||_objj_forward)(object,"message")); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter-inlined.js new file mode 100644 index 000000000..970155db6 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter-inlined.js @@ -0,0 +1,2 @@ +(CPArray.isa.method_msgSend["arrayWithArray:"]||_objj_forward)(CPArray,"arrayWithArray:",[]); +(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",argument)); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver-inlined.js new file mode 100644 index 000000000..1235ab1bc --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver-inlined.js @@ -0,0 +1,11 @@ +var the_class=objj_allocateClassPair(Nil,"MyClass"),meta_class=the_class.isa; +objj_registerClassPair(the_class); +class_addMethods(the_class,[new objj_method(sel_getUid("mySelector"),function $MyClass__mySelector(_1,_2){ +(_1.isa.method_msgSend["init"]||_objj_forward)(_1,"init"); +_1=nil; +(_1==null?null:(_1.isa.method_msgSend["init"]||_objj_forward)(_1,"init")); +},["id"]),new objj_method(sel_getUid("mySelector2"),function $MyClass__mySelector2(_3,_4){ +(_3.isa.method_msgSend["init"]||_objj_forward)(_3,"init"); +eval("self = null;"); +(_3==null?null:(_3.isa.method_msgSend["init"]||_objj_forward)(_3,"init")); +},["id"])]); \ No newline at end of file diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument-inlined.js new file mode 100644 index 000000000..e3159dd7c --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument-inlined.js @@ -0,0 +1,4 @@ + +(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false)); +(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false)); +(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false)); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return-inlined.js new file mode 100644 index 000000000..523b97db5 --- /dev/null +++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return-inlined.js @@ -0,0 +1,3 @@ +x=function(){ +return (someIval==null?null:(someIval.isa.method_msgSend["someMethod"]||_objj_forward)(someIval,"someMethod")); +}; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js index 778d931d6..b73f3c35f 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js @@ -1,5 +1,5 @@ {var the_class = objj_allocateClassPair(Nil, "TC"), -meta_class = the_class.isa;class_addIvars(the_class, [new objj_ivar("_control")]);objj_registerClassPair(the_class); +meta_class = the_class.isa;class_addIvars(the_class, [new objj_ivar("_control","id")]);objj_registerClassPair(the_class); class_addMethods(the_class, [new objj_method(sel_getUid("a"), function $TC__a(self, _cmd) { function(__input) { if (arguments.length) return self._control = __input; return self._control; }; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j index fcd96ba3c..34150d7f2 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j @@ -43,18 +43,28 @@ var FILENAMES = [ class_addMethod(self, testSelector, function(self, _cmd) { - var filePath = FILE.join(FILE.dirname(module.path), filename + ".j"), + var d = FILE.dirname(module.path), + filePath = FILE.join(d, filename + ".j"), unpreprocessed = FILE.read(filePath, { charset:"UTF-8" }), preprocessed, - correct = FILE.read(FILE.join(FILE.dirname(module.path), filename + ".js")); + preprocessedInlined, + correct = FILE.read(FILE.join(d, filename + ".js")), + p = FILE.join(d, filename + "-inlined.js"), + correctInlined = FILE.exists(p) ? FILE.read(p) : correct; // Get inlined version if it exists. Otherwise use the regular one. [self assertNoThrow:function() { - preprocessed = ObjectiveJ.ObjJAcornCompiler.compileToExecutable(unpreprocessed).code(); + preprocessed = ObjectiveJ.ObjJAcornCompiler.compileToExecutable(unpreprocessed, nil, ObjectiveJ.ObjJAcornCompiler.Flags.IncludeDebugSymbols | ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures).code(); preprocessed = compressor.compress(preprocessed, { charset : "UTF-8", useServer : true }); correct = compressor.compress(correct, { charset : "UTF-8", useServer : true }); + + // Get an Inlined version + preprocessedInlined = ObjectiveJ.ObjJAcornCompiler.compileToExecutable(unpreprocessed, nil, ObjectiveJ.ObjJAcornCompiler.Flags.IncludeDebugSymbols | ObjectiveJ.ObjJAcornCompiler.Flags.InlineMsgSend | ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures).code(); + preprocessedInlined = compressor.compress(preprocessedInlined, { charset : "UTF-8", useServer : true }); + correctInlined = compressor.compress(correctInlined, { charset : "UTF-8", useServer : true }); }]; [self assert:correct equals:preprocessed]; + [self assert:correctInlined equals:preprocessedInlined]; }); })(); } 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/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..350946963 100644 --- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj +++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj @@ -7,631 +7,557 @@ 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 */; }; + 6841F26C1AF98DDD00CFE60E /* mod_pbxproj.py in Resources */ = {isa = PBXBuildFile; fileRef = 6841F2691AF98DDD00CFE60E /* mod_pbxproj.py */; }; + 6841F26E1AF98DDD00CFE60E /* pbxprojModifier.py in Resources */ = {isa = PBXBuildFile; fileRef = 6841F26B1AF98DDD00CFE60E /* pbxprojModifier.py */; }; + 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 = ""; }; + 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; }; + 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 */, + ); + 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 */ = { + 6841F2681AF98DDD00CFE60E /* Scripts */ = { 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 */, - ); - name = Resources; - sourceTree = ""; - }; - E164FE121720F3E100263CE3 /* 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 */, + 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 */, + 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 */, + 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 */, + 6841F2441AF98CE600CFE60E /* main.m in Sources */, + 6824CDDA1B0D5AA700F73447 /* XCCOperationDataView.m in Sources */, + 6841F2CA1AFADEBC00CFE60E /* XCCSourcesFinderOperation.m in Sources */, + 681ADE8F1B0D032C00FC8E08 /* XCCPath.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..e405bbfd1 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/AppDelegate.m @@ -0,0 +1,148 @@ +// +// 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, + 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)_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 +{ + NSLog(@"\n******************************\n** XcodeCapp started **\n******************************\n"); + + self.version = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]; + + [self _initUserDefaults]; + [self _initOperationQueue]; + [self _initStatusItem]; + + [self _startObservers]; + + [self->_mainWindowController windowDidLoad]; +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app +{ + NSLog(@"Stop listening to all projects"); + [self.mainWindowController notifyCappuccinoControllersApplicationIsClosing]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + return NSTerminateNow; +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification +{ + NSLog(@"\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/DDLogLevel.h b/Tools/XcodeCapp/XcodeCapp/DDLogLevel.h deleted file mode 100644 index e1c80eb82..000000000 --- a/Tools/XcodeCapp/XcodeCapp/DDLogLevel.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DDLogLevel.h -// XcodeCapp -// -// Created by Aparajita on 4/29/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#import - -extern int ddLogLevel; - -@interface DDLogLevel : NSObject - -+ (void)setLogLevel:(int)logLevel; - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/DDLogLevel.m b/Tools/XcodeCapp/XcodeCapp/DDLogLevel.m deleted file mode 100644 index a0fb829b1..000000000 --- a/Tools/XcodeCapp/XcodeCapp/DDLogLevel.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// DDLog.m -// XcodeCapp -// -// Created by Aparajita on 4/29/13. -// Copyright (c) 2013 Cappuccino Project. All rights reserved. -// - -#import "DDLogLevel.h" - - -int ddLogLevel = LOG_LEVEL_OFF; - - -@implementation DDLogLevel - -+ (int)ddLogLevel -{ - return ddLogLevel; -} - -+ (void)setLogLevel:(int)logLevel -{ - ddLogLevel = logLevel; -} - -@end 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.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 bb698451f..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.8.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.h b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.h deleted file mode 100755 index 0f2e9633e..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.h +++ /dev/null @@ -1,41 +0,0 @@ -#import -#import - -#import "DDLog.h" - -/** - * Welcome to Cocoa Lumberjack! - * - * The project page has a wealth of documentation if you have any questions. - * https://github.com/robbiehanson/CocoaLumberjack - * - * If you're new to the project you may wish to read the "Getting Started" wiki. - * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted - * - * - * This class provides a logger for the Apple System Log facility. - * - * As described in the "Getting Started" page, - * the traditional NSLog() function directs it's output to two places: - * - * - Apple System Log - * - StdErr (if stderr is a TTY) so log statements show up in Xcode console - * - * To duplicate NSLog() functionality you can simply add this logger and a tty logger. - * However, if you instead choose to use file logging (for faster performance), - * you may choose to use a file logger and a tty logger. -**/ - -@interface DDASLLogger : DDAbstractLogger -{ - aslclient client; -} - -+ (DDASLLogger *)sharedInstance; - -// Inherited from DDAbstractLogger - -// - (id )logFormatter; -// - (void)setLogFormatter:(id )formatter; - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m deleted file mode 100755 index 4ec1e7cbf..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m +++ /dev/null @@ -1,99 +0,0 @@ -#import "DDASLLogger.h" - -#import - -/** - * Welcome to Cocoa Lumberjack! - * - * The project page has a wealth of documentation if you have any questions. - * https://github.com/robbiehanson/CocoaLumberjack - * - * If you're new to the project you may wish to read the "Getting Started" wiki. - * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted -**/ - -#if ! __has_feature(objc_arc) -#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). -#endif - - -@implementation DDASLLogger - -static DDASLLogger *sharedInstance; - -/** - * The runtime sends initialize to each class in a program exactly one time just before the class, - * or any class that inherits from it, is sent its first message from within the program. (Thus the - * method may never be invoked if the class is not used.) The runtime sends the initialize message to - * classes in a thread-safe manner. Superclasses receive this message before their subclasses. - * - * This method may also be called directly (assumably by accident), hence the safety mechanism. -**/ -+ (void)initialize -{ - static BOOL initialized = NO; - if (!initialized) - { - initialized = YES; - - sharedInstance = [[DDASLLogger alloc] init]; - } -} - -+ (DDASLLogger *)sharedInstance -{ - return sharedInstance; -} - -- (id)init -{ - if (sharedInstance != nil) - { - return nil; - } - - if ((self = [super init])) - { - // A default asl client is provided for the main thread, - // but background threads need to create their own client. - - client = asl_open(NULL, "com.apple.console", 0); - } - return self; -} - -- (void)logMessage:(DDLogMessage *)logMessage -{ - NSString *logMsg = logMessage->logMsg; - - if (formatter) - { - logMsg = [formatter formatLogMessage:logMessage]; - } - - if (logMsg) - { - const char *msg = [logMsg UTF8String]; - - int aslLogLevel; - switch (logMessage->logLevel) - { - // Note: By default ASL will filter anything above level 5 (Notice). - // So our mappings shouldn't go above that level. - - case 1 : aslLogLevel = ASL_LEVEL_CRIT; break; - case 2 : aslLogLevel = ASL_LEVEL_ERR; break; - case 3 : aslLogLevel = ASL_LEVEL_WARNING; break; - default : aslLogLevel = ASL_LEVEL_NOTICE; break; - } - - asl_log(client, NULL, aslLogLevel, "%s", msg); - } -} - -- (NSString *)loggerName -{ - return @"cocoa.lumberjack.aslLogger"; -} - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h deleted file mode 100755 index 57c2f096c..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h +++ /dev/null @@ -1,597 +0,0 @@ -#import - -/** - * Welcome to Cocoa Lumberjack! - * - * The project page has a wealth of documentation if you have any questions. - * https://github.com/robbiehanson/CocoaLumberjack - * - * If you're new to the project you may wish to read the "Getting Started" wiki. - * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted - * - * Otherwise, here is a quick refresher. - * There are three steps to using the macros: - * - * Step 1: - * Import the header in your implementation file: - * - * #import "DDLog.h" - * - * Step 2: - * Define your logging level in your implementation file: - * - * // Log levels: off, error, warn, info, verbose - * static const int ddLogLevel = LOG_LEVEL_VERBOSE; - * - * Step 3: - * Replace your NSLog statements with DDLog statements according to the severity of the message. - * - * NSLog(@"Fatal error, no dohickey found!"); -> DDLogError(@"Fatal error, no dohickey found!"); - * - * DDLog works exactly the same as NSLog. - * This means you can pass it multiple variables just like NSLog. -**/ - - -@class DDLogMessage; - -@protocol DDLogger; -@protocol DDLogFormatter; - -/** - * This is the single macro that all other macros below compile into. - * This big multiline macro makes all the other macros easier to read. -**/ - -#define LOG_MACRO(isAsynchronous, lvl, flg, ctx, atag, fnct, frmt, ...) \ - [DDLog log:isAsynchronous \ - level:lvl \ - flag:flg \ - context:ctx \ - file:__FILE__ \ - function:fnct \ - line:__LINE__ \ - tag:atag \ - format:(frmt), ##__VA_ARGS__] - -/** - * Define the Objective-C and C versions of the macro. - * These automatically inject the proper function name for either an objective-c method or c function. - * - * We also define shorthand versions for asynchronous and synchronous logging. -**/ - -#define LOG_OBJC_MACRO(async, lvl, flg, ctx, frmt, ...) \ - LOG_MACRO(async, lvl, flg, ctx, nil, sel_getName(_cmd), frmt, ##__VA_ARGS__) - -#define LOG_C_MACRO(async, lvl, flg, ctx, frmt, ...) \ - LOG_MACRO(async, lvl, flg, ctx, nil, __FUNCTION__, frmt, ##__VA_ARGS__) - -#define SYNC_LOG_OBJC_MACRO(lvl, flg, ctx, frmt, ...) \ - LOG_OBJC_MACRO( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -#define ASYNC_LOG_OBJC_MACRO(lvl, flg, ctx, frmt, ...) \ - LOG_OBJC_MACRO(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -#define SYNC_LOG_C_MACRO(lvl, flg, ctx, frmt, ...) \ - LOG_C_MACRO( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -#define ASYNC_LOG_C_MACRO(lvl, flg, ctx, frmt, ...) \ - LOG_C_MACRO(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -/** - * Define version of the macro that only execute if the logLevel is above the threshold. - * The compiled versions essentially look like this: - * - * if (logFlagForThisLogMsg & ddLogLevel) { execute log message } - * - * As shown further below, Lumberjack actually uses a bitmask as opposed to primitive log levels. - * This allows for a great amount of flexibility and some pretty advanced fine grained logging techniques. - * - * Note that when compiler optimizations are enabled (as they are for your release builds), - * the log messages above your logging threshold will automatically be compiled out. - * - * (If the compiler sees ddLogLevel declared as a constant, the compiler simply checks to see if the 'if' statement - * would execute, and if not it strips it from the binary.) - * - * We also define shorthand versions for asynchronous and synchronous logging. -**/ - -#define LOG_MAYBE(async, lvl, flg, ctx, fnct, frmt, ...) \ - do { if(lvl & flg) LOG_MACRO(async, lvl, flg, ctx, nil, fnct, frmt, ##__VA_ARGS__); } while(0) - -#define LOG_OBJC_MAYBE(async, lvl, flg, ctx, frmt, ...) \ - LOG_MAYBE(async, lvl, flg, ctx, sel_getName(_cmd), frmt, ##__VA_ARGS__) - -#define LOG_C_MAYBE(async, lvl, flg, ctx, frmt, ...) \ - LOG_MAYBE(async, lvl, flg, ctx, __FUNCTION__, frmt, ##__VA_ARGS__) - -#define SYNC_LOG_OBJC_MAYBE(lvl, flg, ctx, frmt, ...) \ - LOG_OBJC_MAYBE( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -#define ASYNC_LOG_OBJC_MAYBE(lvl, flg, ctx, frmt, ...) \ - LOG_OBJC_MAYBE(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -#define SYNC_LOG_C_MAYBE(lvl, flg, ctx, frmt, ...) \ - LOG_C_MAYBE( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -#define ASYNC_LOG_C_MAYBE(lvl, flg, ctx, frmt, ...) \ - LOG_C_MAYBE(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__) - -/** - * Define versions of the macros that also accept tags. - * - * The DDLogMessage object includes a 'tag' ivar that may be used for a variety of purposes. - * It may be used to pass custom information to loggers or formatters. - * Or it may be used by 3rd party extensions to the framework. - * - * Thes macros just make it a little easier to extend logging functionality. -**/ - -#define LOG_OBJC_TAG_MACRO(async, lvl, flg, ctx, tag, frmt, ...) \ - LOG_MACRO(async, lvl, flg, ctx, tag, sel_getName(_cmd), frmt, ##__VA_ARGS__) - -#define LOG_C_TAG_MACRO(async, lvl, flg, ctx, tag, frmt, ...) \ - LOG_MACRO(async, lvl, flg, ctx, tag, __FUNCTION__, frmt, ##__VA_ARGS__) - -#define LOG_TAG_MAYBE(async, lvl, flg, ctx, tag, fnct, frmt, ...) \ - do { if(lvl & flg) LOG_MACRO(async, lvl, flg, ctx, tag, fnct, frmt, ##__VA_ARGS__); } while(0) - -#define LOG_OBJC_TAG_MAYBE(async, lvl, flg, ctx, tag, frmt, ...) \ - LOG_TAG_MAYBE(async, lvl, flg, ctx, tag, sel_getName(_cmd), frmt, ##__VA_ARGS__) - -#define LOG_C_TAG_MAYBE(async, lvl, flg, ctx, tag, frmt, ...) \ - LOG_TAG_MAYBE(async, lvl, flg, ctx, tag, __FUNCTION__, frmt, ##__VA_ARGS__) - -/** - * Define the standard options. - * - * We default to only 4 levels because it makes it easier for beginners - * to make the transition to a logging framework. - * - * More advanced users may choose to completely customize the levels (and level names) to suite their needs. - * For more information on this see the "Custom Log Levels" page: - * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels - * - * Advanced users may also notice that we're using a bitmask. - * This is to allow for custom fine grained logging: - * https://github.com/robbiehanson/CocoaLumberjack/wiki/FineGrainedLogging - * - * -- Flags -- - * - * Typically you will use the LOG_LEVELS (see below), but the flags may be used directly in certain situations. - * For example, say you have a lot of warning log messages, and you wanted to disable them. - * However, you still needed to see your error and info log messages. - * You could accomplish that with the following: - * - * static const int ddLogLevel = LOG_FLAG_ERROR | LOG_FLAG_INFO; - * - * Flags may also be consulted when writing custom log formatters, - * as the DDLogMessage class captures the individual flag that caused the log message to fire. - * - * -- Levels -- - * - * Log levels are simply the proper bitmask of the flags. - * - * -- Booleans -- - * - * The booleans may be used when your logging code involves more than one line. - * For example: - * - * if (LOG_VERBOSE) { - * for (id sprocket in sprockets) - * DDLogVerbose(@"sprocket: %@", [sprocket description]) - * } - * - * -- Async -- - * - * Defines the default asynchronous options. - * The default philosophy for asynchronous logging is very simple: - * - * Log messages with errors should be executed synchronously. - * After all, an error just occurred. The application could be unstable. - * - * All other log messages, such as debug output, are executed asynchronously. - * After all, if it wasn't an error, then it was just informational output, - * or something the application was easily able to recover from. - * - * -- Changes -- - * - * You are strongly discouraged from modifying this file. - * If you do, you make it more difficult on yourself to merge future bug fixes and improvements from the project. - * Instead, create your own MyLogging.h or ApplicationNameLogging.h or CompanyLogging.h - * - * For an example of customizing your logging experience, see the "Custom Log Levels" page: - * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels -**/ - -#define LOG_FLAG_ERROR (1 << 0) // 0...0001 -#define LOG_FLAG_WARN (1 << 1) // 0...0010 -#define LOG_FLAG_INFO (1 << 2) // 0...0100 -#define LOG_FLAG_VERBOSE (1 << 3) // 0...1000 - -#define LOG_LEVEL_OFF 0 -#define LOG_LEVEL_ERROR (LOG_FLAG_ERROR) // 0...0001 -#define LOG_LEVEL_WARN (LOG_FLAG_ERROR | LOG_FLAG_WARN) // 0...0011 -#define LOG_LEVEL_INFO (LOG_FLAG_ERROR | LOG_FLAG_WARN | LOG_FLAG_INFO) // 0...0111 -#define LOG_LEVEL_VERBOSE (LOG_FLAG_ERROR | LOG_FLAG_WARN | LOG_FLAG_INFO | LOG_FLAG_VERBOSE) // 0...1111 - -#define LOG_ERROR (ddLogLevel & LOG_FLAG_ERROR) -#define LOG_WARN (ddLogLevel & LOG_FLAG_WARN) -#define LOG_INFO (ddLogLevel & LOG_FLAG_INFO) -#define LOG_VERBOSE (ddLogLevel & LOG_FLAG_VERBOSE) - -#define LOG_ASYNC_ENABLED YES - -#define LOG_ASYNC_ERROR ( NO && LOG_ASYNC_ENABLED) -#define LOG_ASYNC_WARN (YES && LOG_ASYNC_ENABLED) -#define LOG_ASYNC_INFO (YES && LOG_ASYNC_ENABLED) -#define LOG_ASYNC_VERBOSE (YES && LOG_ASYNC_ENABLED) - -#define DDLogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, ddLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) -#define DDLogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, ddLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) -#define DDLogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, ddLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) -#define DDLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, ddLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) - -#define DDLogCError(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_ERROR, ddLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__) -#define DDLogCWarn(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_WARN, ddLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__) -#define DDLogCInfo(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_INFO, ddLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__) -#define DDLogCVerbose(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_VERBOSE, ddLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__) - -/** - * The THIS_FILE macro gives you an NSString of the file name. - * For simplicity and clarity, the file name does not include the full path or file extension. - * - * For example: DDLogWarn(@"%@: Unable to find thingy", THIS_FILE) -> @"MyViewController: Unable to find thingy" -**/ - -NSString *DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy); - -#define THIS_FILE (DDExtractFileNameWithoutExtension(__FILE__, NO)) - -/** - * The THIS_METHOD macro gives you the name of the current objective-c method. - * - * For example: DDLogWarn(@"%@ - Requires non-nil strings") -> @"setMake:model: requires non-nil strings" - * - * Note: This does NOT work in straight C functions (non objective-c). - * Instead you should use the predefined __FUNCTION__ macro. -**/ - -#define THIS_METHOD NSStringFromSelector(_cmd) - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface DDLog : NSObject - -/** - * Provides access to the underlying logging queue. - * This may be helpful to Logger classes for things like thread synchronization. -**/ - -+ (dispatch_queue_t)loggingQueue; - -/** - * Logging Primitive. - * - * This method is used by the macros above. - * It is suggested you stick with the macros as they're easier to use. -**/ - -+ (void)log:(BOOL)synchronous - level:(int)level - flag:(int)flag - context:(int)context - file:(const char *)file - function:(const char *)function - line:(int)line - tag:(id)tag - format:(NSString *)format, ... __attribute__ ((format (__NSString__, 9, 10))); - -/** - * Logging Primitive. - * - * This method can be used if you have a prepared va_list. -**/ - -+ (void)log:(BOOL)asynchronous - level:(int)level - flag:(int)flag - context:(int)context - file:(const char *)file - function:(const char *)function - line:(int)line - tag:(id)tag - format:(NSString *)format - args:(va_list)argList; - - -/** - * Since logging can be asynchronous, there may be times when you want to flush the logs. - * The framework invokes this automatically when the application quits. -**/ - -+ (void)flushLog; - -/** - * Loggers - * - * If you want your log statements to go somewhere, - * you should create and add a logger. -**/ - -+ (void)addLogger:(id )logger; -+ (void)removeLogger:(id )logger; - -+ (void)removeAllLoggers; - -/** - * Registered Dynamic Logging - * - * These methods allow you to obtain a list of classes that are using registered dynamic logging, - * and also provides methods to get and set their log level during run time. -**/ - -+ (NSArray *)registeredClasses; -+ (NSArray *)registeredClassNames; - -+ (int)logLevelForClass:(Class)aClass; -+ (int)logLevelForClassWithName:(NSString *)aClassName; - -+ (void)setLogLevel:(int)logLevel forClass:(Class)aClass; -+ (void)setLogLevel:(int)logLevel forClassWithName:(NSString *)aClassName; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol DDLogger -@required - -- (void)logMessage:(DDLogMessage *)logMessage; - -/** - * Formatters may optionally be added to any logger. - * - * If no formatter is set, the logger simply logs the message as it is given in logMessage, - * or it may use its own built in formatting style. -**/ -- (id )logFormatter; -- (void)setLogFormatter:(id )formatter; - -@optional - -/** - * Since logging is asynchronous, adding and removing loggers is also asynchronous. - * In other words, the loggers are added and removed at appropriate times with regards to log messages. - * - * - Loggers will not receive log messages that were executed prior to when they were added. - * - Loggers will not receive log messages that were executed after they were removed. - * - * These methods are executed in the logging thread/queue. - * This is the same thread/queue that will execute every logMessage: invocation. - * Loggers may use these methods for thread synchronization or other setup/teardown tasks. -**/ -- (void)didAddLogger; -- (void)willRemoveLogger; - -/** - * Some loggers may buffer IO for optimization purposes. - * For example, a database logger may only save occasionaly as the disk IO is slow. - * In such loggers, this method should be implemented to flush any pending IO. - * - * This allows invocations of DDLog's flushLog method to be propogated to loggers that need it. - * - * Note that DDLog's flushLog method is invoked automatically when the application quits, - * and it may be also invoked manually by the developer prior to application crashes, or other such reasons. -**/ -- (void)flush; - -/** - * Each logger is executed concurrently with respect to the other loggers. - * Thus, a dedicated dispatch queue is used for each logger. - * Logger implementations may optionally choose to provide their own dispatch queue. -**/ -- (dispatch_queue_t)loggerQueue; - -/** - * If the logger implementation does not choose to provide its own queue, - * one will automatically be created for it. - * The created queue will receive its name from this method. - * This may be helpful for debugging or profiling reasons. -**/ -- (NSString *)loggerName; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol DDLogFormatter -@required - -/** - * Formatters may optionally be added to any logger. - * This allows for increased flexibility in the logging environment. - * For example, log messages for log files may be formatted differently than log messages for the console. - * - * For more information about formatters, see the "Custom Formatters" page: - * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters - * - * The formatter may also optionally filter the log message by returning nil, - * in which case the logger will not log the message. -**/ -- (NSString *)formatLogMessage:(DDLogMessage *)logMessage; - -@optional - -/** - * A single formatter instance can be added to multiple loggers. - * These methods provides hooks to notify the formatter of when it's added/removed. - * - * This is primarily for thread-safety. - * If a formatter is explicitly not thread-safe, it may wish to throw an exception if added to multiple loggers. - * Or if a formatter has potentially thread-unsafe code (e.g. NSDateFormatter), - * it could possibly use these hooks to switch to thread-safe versions of the code. -**/ -- (void)didAddToLogger:(id )logger; -- (void)willRemoveFromLogger:(id )logger; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol DDRegisteredDynamicLogging - -/** - * Implement these methods to allow a file's log level to be managed from a central location. - * - * This is useful if you'd like to be able to change log levels for various parts - * of your code from within the running application. - * - * Imagine pulling up the settings for your application, - * and being able to configure the logging level on a per file basis. - * - * The implementation can be very straight-forward: - * - * + (int)ddLogLevel - * { - * return ddLogLevel; - * } - * - * + (void)ddSetLogLevel:(int)logLevel - * { - * ddLogLevel = logLevel; - * } -**/ - -+ (int)ddLogLevel; -+ (void)ddSetLogLevel:(int)logLevel; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The DDLogMessage class encapsulates information about the log message. - * If you write custom loggers or formatters, you will be dealing with objects of this class. -**/ - -enum { - DDLogMessageCopyFile = 1 << 0, - DDLogMessageCopyFunction = 1 << 1, -}; -typedef int DDLogMessageOptions; - -@interface DDLogMessage : NSObject -{ - -// The public variables below can be accessed directly (for speed). -// For example: logMessage->logLevel - -@public - int logLevel; - int logFlag; - int logContext; - NSString *logMsg; - NSDate *timestamp; - char *file; - char *function; - int lineNumber; - mach_port_t machThreadID; - char *queueLabel; - NSString *threadName; - - // For 3rd party extensions to the framework, where flags and contexts aren't enough. - id tag; - - // For 3rd party extensions that manually create DDLogMessage instances. - DDLogMessageOptions options; -} - -/** - * Standard init method for a log message object. - * Used by the logging primitives. (And the macros use the logging primitives.) - * - * If you find need to manually create logMessage objects, there is one thing you should be aware of: - * - * If no flags are passed, the method expects the file and function parameters to be string literals. - * That is, it expects the given strings to exist for the duration of the object's lifetime, - * and it expects the given strings to be immutable. - * In other words, it does not copy these strings, it simply points to them. - * This is due to the fact that __FILE__ and __FUNCTION__ are usually used to specify these parameters, - * so it makes sense to optimize and skip the unnecessary allocations. - * 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 - level:(int)logLevel - flag:(int)logFlag - context:(int)logContext - file:(const char *)file - function:(const char *)function - line:(int)line - tag:(id)tag - options:(DDLogMessageOptions)optionsMask; - -/** - * Returns the threadID as it appears in NSLog. - * That is, it is a hexadecimal value which is calculated from the machThreadID. -**/ -- (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; - -/** - * Returns the function variable in NSString form. -**/ -- (NSString *)methodName; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The DDLogger protocol specifies that an optional formatter can be added to a logger. - * Most (but not all) loggers will want to support formatters. - * - * However, writting getters and setters in a thread safe manner, - * while still maintaining maximum speed for the logging process, is a difficult task. - * - * To do it right, the implementation of the getter/setter has strict requiremenets: - * - Must NOT require the logMessage method to acquire a lock. - * - Must NOT require the logMessage method to access an atomic property (also a lock of sorts). - * - * To simplify things, an abstract logger is provided that implements the getter and setter. - * - * Logger implementations may simply extend this class, - * and they can ACCESS THE FORMATTER VARIABLE DIRECTLY from within their logMessage method! -**/ - -@interface DDAbstractLogger : NSObject -{ - id formatter; - - dispatch_queue_t loggerQueue; -} - -- (id )logFormatter; -- (void)setLogFormatter:(id )formatter; - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m deleted file mode 100755 index 7d75d8121..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m +++ /dev/null @@ -1,1067 +0,0 @@ -#import "DDLog.h" - -#import -#import -#import -#import -#import - - -/** - * Welcome to Cocoa Lumberjack! - * - * The project page has a wealth of documentation if you have any questions. - * https://github.com/robbiehanson/CocoaLumberjack - * - * If you're new to the project you may wish to read the "Getting Started" wiki. - * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted - * -**/ - -#if ! __has_feature(objc_arc) -#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). -#endif - -// Does ARC support support GCD objects? -// It does if the minimum deployment target is iOS 6+ or Mac OS X 8+ - -#if TARGET_OS_IPHONE - - // Compiling for iOS - - #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 // iOS 6.0 or later - #define NEEDS_DISPATCH_RETAIN_RELEASE 0 - #else // iOS 5.X or earlier - #define NEEDS_DISPATCH_RETAIN_RELEASE 1 - #endif - -#else - - // Compiling for Mac OS X - - #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 // Mac OS X 10.8 or later - #define NEEDS_DISPATCH_RETAIN_RELEASE 0 - #else - #define NEEDS_DISPATCH_RETAIN_RELEASE 1 // Mac OS X 10.7 or earlier - #endif - -#endif - -// We probably shouldn't be using DDLog() statements within the DDLog implementation. -// But we still want to leave our log statements for any future debugging, -// and to allow other developers to trace the implementation (which is a great learning tool). -// -// So we use a primitive logging macro around NSLog. -// We maintain the NS prefix on the macros to be explicit about the fact that we're using NSLog. - -#define DD_DEBUG NO - -#define NSLogDebug(frmt, ...) do{ if(DD_DEBUG) NSLog((frmt), ##__VA_ARGS__); } while(0) - -// Specifies the maximum queue size of the logging thread. -// -// Since most logging is asynchronous, its possible for rogue threads to flood the logging queue. -// That is, to issue an abundance of log statements faster than the logging thread can keepup. -// Typically such a scenario occurs when log statements are added haphazardly within large loops, -// but may also be possible if relatively slow loggers are being used. -// -// This property caps the queue size at a given number of outstanding log statements. -// If a thread attempts to issue a log statement when the queue is already maxed out, -// the issuing thread will block until the queue size drops below the max again. - -#define LOG_MAX_QUEUE_SIZE 1000 // Should not exceed INT32_MAX - - -@interface DDLoggerNode : NSObject { -@public - id logger; - dispatch_queue_t loggerQueue; -} - -+ (DDLoggerNode *)nodeWithLogger:(id )logger loggerQueue:(dispatch_queue_t)loggerQueue; - -@end - - -@interface DDLog (PrivateAPI) - -+ (void)lt_addLogger:(id )logger; -+ (void)lt_removeLogger:(id )logger; -+ (void)lt_removeAllLoggers; -+ (void)lt_log:(DDLogMessage *)logMessage; -+ (void)lt_flush; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation DDLog - -// An array used to manage all the individual loggers. -// The array is only modified on the loggingQueue/loggingThread. -static NSMutableArray *loggers; - -// All logging statements are added to the same queue to ensure FIFO operation. -static dispatch_queue_t loggingQueue; - -// Individual loggers are executed concurrently per log statement. -// Each logger has it's own associated queue, and a dispatch group is used for synchrnoization. -static dispatch_group_t loggingGroup; - -// In order to prevent to queue from growing infinitely large, -// a maximum size is enforced (LOG_MAX_QUEUE_SIZE). -static dispatch_semaphore_t queueSemaphore; - -// Minor optimization for uniprocessor machines -static unsigned int numProcessors; - -/** - * The runtime sends initialize to each class in a program exactly one time just before the class, - * or any class that inherits from it, is sent its first message from within the program. (Thus the - * method may never be invoked if the class is not used.) The runtime sends the initialize message to - * classes in a thread-safe manner. Superclasses receive this message before their subclasses. - * - * This method may also be called directly (assumably by accident), hence the safety mechanism. -**/ -+ (void)initialize -{ - static BOOL initialized = NO; - if (!initialized) - { - initialized = YES; - - loggers = [[NSMutableArray alloc] initWithCapacity:4]; - - NSLogDebug(@"DDLog: Using grand central dispatch"); - - loggingQueue = dispatch_queue_create("cocoa.lumberjack", NULL); - loggingGroup = dispatch_group_create(); - - queueSemaphore = dispatch_semaphore_create(LOG_MAX_QUEUE_SIZE); - - // Figure out how many processors are available. - // This may be used later for an optimization on uniprocessor machines. - - host_basic_info_data_t hostInfo; - mach_msg_type_number_t infoCount; - - infoCount = HOST_BASIC_INFO_COUNT; - host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount); - - unsigned int result = (unsigned int)(hostInfo.max_cpus); - unsigned int one = (unsigned int)(1); - - numProcessors = MAX(result, one); - - NSLogDebug(@"DDLog: numProcessors = %u", numProcessors); - - - #if TARGET_OS_IPHONE - NSString *notificationName = @"UIApplicationWillTerminateNotification"; - #else - NSString *notificationName = @"NSApplicationWillTerminateNotification"; - #endif - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationWillTerminate:) - name:notificationName - object:nil]; - } -} - -/** - * Provides access to the logging queue. -**/ -+ (dispatch_queue_t)loggingQueue -{ - return loggingQueue; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark Notifications -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -+ (void)applicationWillTerminate:(NSNotification *)notification -{ - [self flushLog]; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark Logger Management -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -+ (void)addLogger:(id )logger -{ - if (logger == nil) return; - - dispatch_async(loggingQueue, ^{ @autoreleasepool { - - [self lt_addLogger:logger]; - }}); -} - -+ (void)removeLogger:(id )logger -{ - if (logger == nil) return; - - dispatch_async(loggingQueue, ^{ @autoreleasepool { - - [self lt_removeLogger:logger]; - }}); -} - -+ (void)removeAllLoggers -{ - dispatch_async(loggingQueue, ^{ @autoreleasepool { - - [self lt_removeAllLoggers]; - }}); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark Master Logging -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -+ (void)queueLogMessage:(DDLogMessage *)logMessage asynchronously:(BOOL)asyncFlag -{ - // We have a tricky situation here... - // - // In the common case, when the queueSize is below the maximumQueueSize, - // we want to simply enqueue the logMessage. And we want to do this as fast as possible, - // which means we don't want to block and we don't want to use any locks. - // - // However, if the queueSize gets too big, we want to block. - // But we have very strict requirements as to when we block, and how long we block. - // - // The following example should help illustrate our requirements: - // - // Imagine that the maximum queue size is configured to be 5, - // and that there are already 5 log messages queued. - // Let us call these 5 queued log messages A, B, C, D, and E. (A is next to be executed) - // - // Now if our thread issues a log statement (let us call the log message F), - // it should block before the message is added to the queue. - // Furthermore, it should be unblocked immediately after A has been unqueued. - // - // The requirements are strict in this manner so that we block only as long as necessary, - // and so that blocked threads are unblocked in the order in which they were blocked. - // - // Returning to our previous example, let us assume that log messages A through E are still queued. - // Our aforementioned thread is blocked attempting to queue log message F. - // Now assume we have another separate thread that attempts to issue log message G. - // It should block until log messages A and B have been unqueued. - - - // We are using a counting semaphore provided by GCD. - // The semaphore is initialized with our LOG_MAX_QUEUE_SIZE value. - // Everytime we want to queue a log message we decrement this value. - // If the resulting value is less than zero, - // the semaphore function waits in FIFO order for a signal to occur before returning. - // - // A dispatch semaphore is an efficient implementation of a traditional counting semaphore. - // Dispatch semaphores call down to the kernel only when the calling thread needs to be blocked. - // If the calling semaphore does not need to block, no kernel call is made. - - dispatch_semaphore_wait(queueSemaphore, DISPATCH_TIME_FOREVER); - - // We've now sure we won't overflow the queue. - // It is time to queue our log message. - - dispatch_block_t logBlock = ^{ @autoreleasepool { - - [self lt_log:logMessage]; - }}; - - if (asyncFlag) - dispatch_async(loggingQueue, logBlock); - else - dispatch_sync(loggingQueue, logBlock); -} - -+ (void)log:(BOOL)asynchronous - level:(int)level - flag:(int)flag - context:(int)context - file:(const char *)file - function:(const char *)function - line:(int)line - tag:(id)tag - format:(NSString *)format, ... -{ - va_list args; - if (format) - { - va_start(args, format); - - NSString *logMsg = [[NSString alloc] initWithFormat:format arguments:args]; - DDLogMessage *logMessage = [[DDLogMessage alloc] initWithLogMsg:logMsg - level:level - flag:flag - context:context - file:file - function:function - line:line - tag:tag - options:0]; - - [self queueLogMessage:logMessage asynchronously:asynchronous]; - - va_end(args); - } -} - -+ (void)log:(BOOL)asynchronous - level:(int)level - flag:(int)flag - context:(int)context - file:(const char *)file - function:(const char *)function - line:(int)line - tag:(id)tag - format:(NSString *)format - args:(va_list)args -{ - if (format) - { - NSString *logMsg = [[NSString alloc] initWithFormat:format arguments:args]; - DDLogMessage *logMessage = [[DDLogMessage alloc] initWithLogMsg:logMsg - level:level - flag:flag - context:context - file:file - function:function - line:line - tag:tag - options:0]; - - [self queueLogMessage:logMessage asynchronously:asynchronous]; - } -} - -+ (void)flushLog -{ - dispatch_sync(loggingQueue, ^{ @autoreleasepool { - - [self lt_flush]; - }}); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark Registered Dynamic Logging -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -+ (BOOL)isRegisteredClass:(Class)class -{ - SEL getterSel = @selector(ddLogLevel); - SEL setterSel = @selector(ddSetLogLevel:); - -#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR - - // Issue #6 (GoogleCode) - Crashes on iOS 4.2.1 and iPhone 4 - // - // Crash caused by class_getClassMethod(2). - // - // "It's a bug with UIAccessibilitySafeCategory__NSObject so it didn't pop up until - // users had VoiceOver enabled [...]. I was able to work around it by searching the - // result of class_copyMethodList() instead of calling class_getClassMethod()" - - BOOL result = NO; - - unsigned int methodCount, i; - Method *methodList = class_copyMethodList(object_getClass(class), &methodCount); - - if (methodList != NULL) - { - BOOL getterFound = NO; - BOOL setterFound = NO; - - for (i = 0; i < methodCount; ++i) - { - SEL currentSel = method_getName(methodList[i]); - - if (currentSel == getterSel) - { - getterFound = YES; - } - else if (currentSel == setterSel) - { - setterFound = YES; - } - - if (getterFound && setterFound) - { - result = YES; - break; - } - } - - free(methodList); - } - - return result; - -#else - - // Issue #24 (GitHub) - Crashing in in ARC+Simulator - // - // The method +[DDLog isRegisteredClass] will crash a project when using it with ARC + Simulator. - // For running in the Simulator, it needs to execute the non-iOS code. - - Method getter = class_getClassMethod(class, getterSel); - Method setter = class_getClassMethod(class, setterSel); - - if ((getter != NULL) && (setter != NULL)) - { - return YES; - } - - return NO; - -#endif -} - -+ (NSArray *)registeredClasses -{ - int numClasses, i; - - // We're going to get the list of all registered classes. - // The Objective-C runtime library automatically registers all the classes defined in your source code. - // - // To do this we use the following method (documented in the Objective-C Runtime Reference): - // - // int objc_getClassList(Class *buffer, int bufferLen) - // - // We can pass (NULL, 0) to obtain the total number of - // registered class definitions without actually retrieving any class definitions. - // This allows us to allocate the minimum amount of memory needed for the application. - - numClasses = objc_getClassList(NULL, 0); - - // The numClasses method now tells us how many classes we have. - // So we can allocate our buffer, and get pointers to all the class definitions. - - Class *classes = (Class *)malloc(sizeof(Class) * numClasses); - - numClasses = objc_getClassList(classes, numClasses); - - // We can now loop through the classes, and test each one to see if it is a DDLogging class. - - NSMutableArray *result = [NSMutableArray arrayWithCapacity:numClasses]; - - for (i = 0; i < numClasses; i++) - { - Class class = classes[i]; - - if ([self isRegisteredClass:class]) - { - [result addObject:class]; - } - } - - free(classes); - - return result; -} - -+ (NSArray *)registeredClassNames -{ - NSArray *registeredClasses = [self registeredClasses]; - NSMutableArray *result = [NSMutableArray arrayWithCapacity:[registeredClasses count]]; - - for (Class class in registeredClasses) - { - [result addObject:NSStringFromClass(class)]; - } - - return result; -} - -+ (int)logLevelForClass:(Class)aClass -{ - if ([self isRegisteredClass:aClass]) - { - return [aClass ddLogLevel]; - } - - return -1; -} - -+ (int)logLevelForClassWithName:(NSString *)aClassName -{ - Class aClass = NSClassFromString(aClassName); - - return [self logLevelForClass:aClass]; -} - -+ (void)setLogLevel:(int)logLevel forClass:(Class)aClass -{ - if ([self isRegisteredClass:aClass]) - { - [aClass ddSetLogLevel:logLevel]; - } -} - -+ (void)setLogLevel:(int)logLevel forClassWithName:(NSString *)aClassName -{ - Class aClass = NSClassFromString(aClassName); - - [self setLogLevel:logLevel forClass:aClass]; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark Logging Thread -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * This method should only be run on the logging thread/queue. -**/ -+ (void)lt_addLogger:(id )logger -{ - // Add to loggers array. - // Need to create loggerQueue if loggerNode doesn't provide one. - - dispatch_queue_t loggerQueue = NULL; - - if ([logger respondsToSelector:@selector(loggerQueue)]) - { - // Logger may be providing its own queue - - loggerQueue = [logger loggerQueue]; - } - - if (loggerQueue == nil) - { - // Automatically create queue for the logger. - // Use the logger name as the queue name if possible. - - const char *loggerQueueName = NULL; - if ([logger respondsToSelector:@selector(loggerName)]) - { - loggerQueueName = [[logger loggerName] UTF8String]; - } - - loggerQueue = dispatch_queue_create(loggerQueueName, NULL); - } - - DDLoggerNode *loggerNode = [DDLoggerNode nodeWithLogger:logger loggerQueue:loggerQueue]; - [loggers addObject:loggerNode]; - - if ([logger respondsToSelector:@selector(didAddLogger)]) - { - dispatch_async(loggerNode->loggerQueue, ^{ @autoreleasepool { - - [logger didAddLogger]; - }}); - } -} - -/** - * This method should only be run on the logging thread/queue. -**/ -+ (void)lt_removeLogger:(id )logger -{ - // Find associated loggerNode in list of added loggers - - DDLoggerNode *loggerNode = nil; - - for (DDLoggerNode *node in loggers) - { - if (node->logger == logger) - { - loggerNode = node; - break; - } - } - - if (loggerNode == nil) - { - NSLogDebug(@"DDLog: Request to remove logger which wasn't added"); - return; - } - - // Notify logger - - if ([logger respondsToSelector:@selector(willRemoveLogger)]) - { - dispatch_async(loggerNode->loggerQueue, ^{ @autoreleasepool { - - [logger willRemoveLogger]; - }}); - } - - // Remove from loggers array - - [loggers removeObject:loggerNode]; -} - -/** - * This method should only be run on the logging thread/queue. -**/ -+ (void)lt_removeAllLoggers -{ - // Notify all loggers - - for (DDLoggerNode *loggerNode in loggers) - { - if ([loggerNode->logger respondsToSelector:@selector(willRemoveLogger)]) - { - dispatch_async(loggerNode->loggerQueue, ^{ @autoreleasepool { - - [loggerNode->logger willRemoveLogger]; - }}); - } - } - - // Remove all loggers from array - - [loggers removeAllObjects]; -} - -/** - * This method should only be run on the logging thread/queue. -**/ -+ (void)lt_log:(DDLogMessage *)logMessage -{ - // Execute the given log message on each of our loggers. - - if (numProcessors > 1) - { - // Execute each logger concurrently, each within its own queue. - // All blocks are added to same group. - // After each block has been queued, wait on group. - // - // The waiting ensures that a slow logger doesn't end up with a large queue of pending log messages. - // This would defeat the purpose of the efforts we made earlier to restrict the max queue size. - - for (DDLoggerNode *loggerNode in loggers) - { - dispatch_group_async(loggingGroup, loggerNode->loggerQueue, ^{ @autoreleasepool { - - [loggerNode->logger logMessage:logMessage]; - - }}); - } - - dispatch_group_wait(loggingGroup, DISPATCH_TIME_FOREVER); - } - else - { - // Execute each logger serialy, each within its own queue. - - for (DDLoggerNode *loggerNode in loggers) - { - dispatch_sync(loggerNode->loggerQueue, ^{ @autoreleasepool { - - [loggerNode->logger logMessage:logMessage]; - - }}); - } - } - - // If our queue got too big, there may be blocked threads waiting to add log messages to the queue. - // Since we've now dequeued an item from the log, we may need to unblock the next thread. - - // We are using a counting semaphore provided by GCD. - // The semaphore is initialized with our LOG_MAX_QUEUE_SIZE value. - // When a log message is queued this value is decremented. - // When a log message is dequeued this value is incremented. - // If the value ever drops below zero, - // the queueing thread blocks and waits in FIFO order for us to signal it. - // - // A dispatch semaphore is an efficient implementation of a traditional counting semaphore. - // Dispatch semaphores call down to the kernel only when the calling thread needs to be blocked. - // If the calling semaphore does not need to block, no kernel call is made. - - dispatch_semaphore_signal(queueSemaphore); -} - -/** - * This method should only be run on the background logging thread. -**/ -+ (void)lt_flush -{ - // All log statements issued before the flush method was invoked have now been executed. - // - // Now we need to propogate the flush request to any loggers that implement the flush method. - // This is designed for loggers that buffer IO. - - for (DDLoggerNode *loggerNode in loggers) - { - if ([loggerNode->logger respondsToSelector:@selector(flush)]) - { - dispatch_group_async(loggingGroup, loggerNode->loggerQueue, ^{ @autoreleasepool { - - [loggerNode->logger flush]; - - }}); - } - } - - dispatch_group_wait(loggingGroup, DISPATCH_TIME_FOREVER); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark Utilities -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -NSString *DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy) -{ - if (filePath == NULL) return nil; - - char *lastSlash = NULL; - char *lastDot = NULL; - - char *p = (char *)filePath; - - while (*p != '\0') - { - if (*p == '/') - lastSlash = p; - else if (*p == '.') - lastDot = p; - - p++; - } - - char *subStr; - NSUInteger subLen; - - if (lastSlash) - { - if (lastDot) - { - // lastSlash -> lastDot - subStr = lastSlash + 1; - subLen = lastDot - subStr; - } - else - { - // lastSlash -> endOfString - subStr = lastSlash + 1; - subLen = p - subStr; - } - } - else - { - if (lastDot) - { - // startOfString -> lastDot - subStr = (char *)filePath; - subLen = lastDot - subStr; - } - else - { - // startOfString -> endOfString - subStr = (char *)filePath; - subLen = p - subStr; - } - } - - if (copy) - { - return [[NSString alloc] initWithBytes:subStr - length:subLen - encoding:NSUTF8StringEncoding]; - } - else - { - // We can take advantage of the fact that __FILE__ is a string literal. - // Specifically, we don't need to waste time copying the string. - // We can just tell NSString to point to a range within the string literal. - - return [[NSString alloc] initWithBytesNoCopy:subStr - length:subLen - encoding:NSUTF8StringEncoding - freeWhenDone:NO]; - } -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation DDLoggerNode - -- (id)initWithLogger:(id )aLogger loggerQueue:(dispatch_queue_t)aLoggerQueue -{ - if ((self = [super init])) - { - logger = aLogger; - - if (aLoggerQueue) { - loggerQueue = aLoggerQueue; - #if NEEDS_DISPATCH_RETAIN_RELEASE - dispatch_retain(loggerQueue); - #endif - } - } - return self; -} - -+ (DDLoggerNode *)nodeWithLogger:(id )logger loggerQueue:(dispatch_queue_t)loggerQueue -{ - return [[DDLoggerNode alloc] initWithLogger:logger loggerQueue:loggerQueue]; -} - -- (void)dealloc -{ - #if NEEDS_DISPATCH_RETAIN_RELEASE - if (loggerQueue) dispatch_release(loggerQueue); - #endif -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation DDLogMessage - -static char *dd_str_copy(const char *str) -{ - if (str == NULL) return NULL; - - size_t length = strlen(str); - char * result = malloc(length + 1); - strncpy(result, str, length); - result[length] = 0; - - return result; -} - -- (id)initWithLogMsg:(NSString *)msg - level:(int)level - flag:(int)flag - context:(int)context - file:(const char *)aFile - function:(const char *)aFunction - line:(int)line - tag:(id)aTag - options:(DDLogMessageOptions)optionsMask -{ - if ((self = [super init])) - { - logMsg = msg; - logLevel = level; - logFlag = flag; - logContext = context; - lineNumber = line; - tag = aTag; - options = optionsMask; - - if (options & DDLogMessageCopyFile) - file = dd_str_copy(aFile); - else - file = (char *)aFile; - - if (options & DDLogMessageCopyFunction) - file = dd_str_copy(aFunction); - else - function = (char *)aFunction; - - timestamp = [[NSDate alloc] init]; - - machThreadID = pthread_mach_thread_np(pthread_self()); - - queueLabel = dd_str_copy(dispatch_queue_get_label(dispatch_get_current_queue())); - - threadName = [[NSThread currentThread] name]; - } - return self; -} - -- (NSString *)threadID -{ - return [[NSString alloc] initWithFormat:@"%x", machThreadID]; -} - -- (NSString *)fileName -{ - return DDExtractFileNameWithoutExtension(file, NO); -} - -- (NSString *)methodName -{ - if (function == NULL) - return nil; - else - return [[NSString alloc] initWithUTF8String:function]; -} - -- (void)dealloc -{ - if (file && (options & DDLogMessageCopyFile)) - free(file); - - if (function && (options & DDLogMessageCopyFunction)) - free(function); - - if (queueLabel) - free(queueLabel); -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation DDAbstractLogger - -- (id)init -{ - if ((self = [super init])) - { - const char *loggerQueueName = NULL; - if ([self respondsToSelector:@selector(loggerName)]) - { - loggerQueueName = [[self loggerName] UTF8String]; - } - - loggerQueue = dispatch_queue_create(loggerQueueName, NULL); - } - return self; -} - -- (void)dealloc -{ - #if NEEDS_DISPATCH_RETAIN_RELEASE - if (loggerQueue) dispatch_release(loggerQueue); - #endif -} - -- (void)logMessage:(DDLogMessage *)logMessage -{ - // Override me -} - -- (id )logFormatter -{ - // This method must be thread safe and intuitive. - // Therefore if somebody executes the following code: - // - // [logger setLogFormatter:myFormatter]; - // formatter = [logger logFormatter]; - // - // They would expect formatter to equal myFormatter. - // This functionality must be ensured by the getter and setter method. - // - // The thread safety must not come at a cost to the performance of the logMessage method. - // This method is likely called sporadically, while the logMessage method is called repeatedly. - // This means, the implementation of this method: - // - Must NOT require the logMessage method to acquire a lock. - // - Must NOT require the logMessage method to access an atomic property (also a lock of sorts). - // - // Thread safety is ensured by executing access to the formatter variable on the loggerQueue. - // This is the same queue that the logMessage method operates on. - // - // Note: The last time I benchmarked the performance of direct access vs atomic property access, - // direct access was over twice as fast on the desktop and over 6 times as fast on the iPhone. - // - // - // loggerQueue : Our own private internal queue that the logMessage method runs on. - // Operations are added to this queue from the global loggingQueue. - // - // loggingQueue : The queue that all log messages go through before they arrive in our loggerQueue. - // - // It is important to note that, while the loggerQueue is used to create thread-safety for our formatter, - // changes to the formatter variable are queued through the loggingQueue. - // - // Since this will obviously confuse the hell out of me later, here is a better description. - // Imagine the following code: - // - // DDLogVerbose(@"log msg 1"); - // DDLogVerbose(@"log msg 2"); - // [logger setFormatter:myFormatter]; - // DDLogVerbose(@"log msg 3"); - // - // Our intuitive requirement means that the new formatter will only apply to the 3rd log message. - // But notice what happens if we have asynchronous logging enabled for verbose mode. - // - // Log msg 1 starts executing asynchronously on the loggingQueue. - // The loggingQueue executes the log statement on each logger concurrently. - // That means it executes log msg 1 on our loggerQueue. - // While log msg 1 is executing, log msg 2 gets added to the loggingQueue. - // Then the user requests that we change our formatter. - // So at this exact moment, our queues look like this: - // - // loggerQueue : executing log msg 1, nil - // loggingQueue : executing log msg 1, log msg 2, nil - // - // So direct access to the formatter is only available if requested from the loggerQueue. - // In all other circumstances we need to go through the loggingQueue to get the proper value. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - return formatter; - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - __block id result; - - dispatch_sync(globalLoggingQueue, ^{ - dispatch_sync(loggerQueue, ^{ - result = formatter; - }); - }); - - return result; - } -} - -- (void)setLogFormatter:(id )logFormatter -{ - // The design of this method is documented extensively in the logFormatter message (above in code). - - dispatch_block_t block = ^{ @autoreleasepool { - - if (formatter != logFormatter) - { - if ([formatter respondsToSelector:@selector(willRemoveFromLogger:)]) { - [formatter willRemoveFromLogger:self]; - } - - formatter = logFormatter; - - if ([formatter respondsToSelector:@selector(didAddToLogger:)]) { - [formatter didAddToLogger:self]; - } - } - }}; - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (dispatch_queue_t)loggerQueue -{ - return loggerQueue; -} - -- (NSString *)loggerName -{ - return NSStringFromClass([self class]); -} - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.h b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.h deleted file mode 100755 index 4cbd2e8e9..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.h +++ /dev/null @@ -1,167 +0,0 @@ -#import -#if TARGET_OS_IPHONE -#import -#else -#import -#endif - -#import "DDLog.h" - -/** - * Welcome to Cocoa Lumberjack! - * - * The project page has a wealth of documentation if you have any questions. - * https://github.com/robbiehanson/CocoaLumberjack - * - * If you're new to the project you may wish to read the "Getting Started" wiki. - * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted - * - * - * This class provides a logger for Terminal output or Xcode console output, - * depending on where you are running your code. - * - * As described in the "Getting Started" page, - * the traditional NSLog() function directs it's output to two places: - * - * - Apple System Log (so it shows up in Console.app) - * - StdErr (if stderr is a TTY, so log statements show up in Xcode console) - * - * To duplicate NSLog() functionality you can simply add this logger and an asl logger. - * However, if you instead choose to use file logging (for faster performance), - * you may choose to use only a file logger and a tty logger. -**/ - -@interface DDTTYLogger : DDAbstractLogger -{ - NSCalendar *calendar; - NSUInteger calendarUnitFlags; - - NSString *appName; - char *app; - size_t appLen; - - NSString *processID; - char *pid; - size_t pidLen; - - BOOL colorsEnabled; - NSMutableArray *colorProfilesArray; - NSMutableDictionary *colorProfilesDict; -} - -+ (DDTTYLogger *)sharedInstance; - -/* Inherited from the DDLogger protocol: - * - * Formatters may optionally be added to any logger. - * - * If no formatter is set, the logger simply logs the message as it is given in logMessage, - * or it may use its own built in formatting style. - * - * More information about formatters can be found here: - * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters - * - * The actual implementation of these methods is inherited from DDAbstractLogger. - -- (id )logFormatter; -- (void)setLogFormatter:(id )formatter; - -*/ - -/** - * Want to use different colors for different log levels? - * Enable this property. - * - * If you run the application via the Terminal (not Xcode), - * the logger will map colors to xterm-256color or xterm-color (if available). - * - * Xcode does NOT natively support colors in the Xcode debugging console. - * You'll need to install the XcodeColors plugin to see colors in the Xcode console. - * https://github.com/robbiehanson/XcodeColors - * - * The default value if NO. -**/ -@property (readwrite, assign) BOOL colorsEnabled; - -/** - * The default color set (foregroundColor, backgroundColor) is: - * - * - LOG_FLAG_ERROR = (red, nil) - * - LOG_FLAG_WARN = (orange, nil) - * - * You can customize the colors however you see fit. - * Please note that you are passing a flag, NOT a level. - * - * GOOD : [ttyLogger setForegroundColor:pink backgroundColor:nil forFlag:LOG_FLAG_INFO]; // <- Good :) - * BAD : [ttyLogger setForegroundColor:pink backgroundColor:nil forFlag:LOG_LEVEL_INFO]; // <- BAD! :( - * - * LOG_FLAG_INFO = 0...00100 - * LOG_LEVEL_INFO = 0...00111 <- Would match LOG_FLAG_INFO and LOG_FLAG_WARN and LOG_FLAG_ERROR - * - * If you run the application within Xcode, then the XcodeColors plugin is required. - * - * If you run the application from a shell, then DDTTYLogger will automatically map the given color to - * the closest available color. (xterm-256color or xterm-color which have 256 and 16 supported colors respectively.) - * - * This method invokes setForegroundColor:backgroundColor:forFlag:context: and passes the default context (0). -**/ -#if TARGET_OS_IPHONE -- (void)setForegroundColor:(UIColor *)txtColor backgroundColor:(UIColor *)bgColor forFlag:(int)mask; -#else -- (void)setForegroundColor:(NSColor *)txtColor backgroundColor:(NSColor *)bgColor forFlag:(int)mask; -#endif - -/** - * Just like setForegroundColor:backgroundColor:flag, but allows you to specify a particular logging context. - * - * A logging context is often used to identify log messages coming from a 3rd party framework, - * although logging context's can be used for many different functions. - * - * Logging context's are explained in further detail here: - * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomContext -**/ -#if TARGET_OS_IPHONE -- (void)setForegroundColor:(UIColor *)txtColor backgroundColor:(UIColor *)bgColor forFlag:(int)mask context:(int)ctxt; -#else -- (void)setForegroundColor:(NSColor *)txtColor backgroundColor:(NSColor *)bgColor forFlag:(int)mask context:(int)ctxt; -#endif - -/** - * Similar to the methods above, but allows you to map DDLogMessage->tag to a particular color profile. - * For example, you could do something like this: - * - * static NSString *const PurpleTag = @"PurpleTag"; - * - * #define DDLogPurple(frmt, ...) LOG_OBJC_TAG_MACRO(NO, 0, 0, 0, PurpleTag, frmt, ##__VA_ARGS__) - * - * And then in your applicationDidFinishLaunching, or wherever you configure Lumberjack: - * - * #if TARGET_OS_IPHONE - * UIColor *purple = [UIColor colorWithRed:(64/255.0) green:(0/255.0) blue:(128/255.0) alpha:1.0]; - * #else - * NSColor *purple = [NSColor colorWithCalibratedRed:(64/255.0) green:(0/255.0) blue:(128/255.0) alpha:1.0]; - * - * [[DDTTYLogger sharedInstance] setForegroundColor:purple backgroundColor:nil forTag:PurpleTag]; - * [DDLog addLogger:[DDTTYLogger sharedInstance]]; - * - * This would essentially give you a straight NSLog replacement that prints in purple: - * - * DDLogPurple(@"I'm a purple log message!"); -**/ -#if TARGET_OS_IPHONE -- (void)setForegroundColor:(UIColor *)txtColor backgroundColor:(UIColor *)bgColor forTag:(id )tag; -#else -- (void)setForegroundColor:(NSColor *)txtColor backgroundColor:(NSColor *)bgColor forTag:(id )tag; -#endif - -/** - * Clearing color profiles. -**/ -- (void)clearColorsForFlag:(int)mask; -- (void)clearColorsForFlag:(int)mask context:(int)context; -- (void)clearColorsForTag:(id )tag; -- (void)clearColorsForAllFlags; -- (void)clearColorsForAllTags; -- (void)clearAllColors; - -@end diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m deleted file mode 100755 index 3157d84e9..000000000 --- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m +++ /dev/null @@ -1,1480 +0,0 @@ -#import "DDTTYLogger.h" - -#import -#import - -/** - * Welcome to Cocoa Lumberjack! - * - * The project page has a wealth of documentation if you have any questions. - * https://github.com/robbiehanson/CocoaLumberjack - * - * If you're new to the project you may wish to read the "Getting Started" wiki. - * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted -**/ - -#if ! __has_feature(objc_arc) -#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). -#endif - -// We probably shouldn't be using DDLog() statements within the DDLog implementation. -// But we still want to leave our log statements for any future debugging, -// and to allow other developers to trace the implementation (which is a great learning tool). -// -// So we use primitive logging macros around NSLog. -// We maintain the NS prefix on the macros to be explicit about the fact that we're using NSLog. - -#define LOG_LEVEL 2 - -#define NSLogError(frmt, ...) do{ if(LOG_LEVEL >= 1) NSLog((frmt), ##__VA_ARGS__); } while(0) -#define NSLogWarn(frmt, ...) do{ if(LOG_LEVEL >= 2) NSLog((frmt), ##__VA_ARGS__); } while(0) -#define NSLogInfo(frmt, ...) do{ if(LOG_LEVEL >= 3) NSLog((frmt), ##__VA_ARGS__); } while(0) -#define NSLogVerbose(frmt, ...) do{ if(LOG_LEVEL >= 4) NSLog((frmt), ##__VA_ARGS__); } while(0) - -// Xcode does NOT natively support colors in the Xcode debugging console. -// You'll need to install the XcodeColors plugin to see colors in the Xcode console. -// https://github.com/robbiehanson/XcodeColors -// -// The following is documentation from the XcodeColors project: -// -// -// How to apply color formatting to your log statements: -// -// To set the foreground color: -// Insert the ESCAPE_SEQ into your string, followed by "fg124,12,255;" where r=124, g=12, b=255. -// -// To set the background color: -// Insert the ESCAPE_SEQ into your string, followed by "bg12,24,36;" where r=12, g=24, b=36. -// -// To reset the foreground color (to default value): -// Insert the ESCAPE_SEQ into your string, followed by "fg;" -// -// To reset the background color (to default value): -// Insert the ESCAPE_SEQ into your string, followed by "bg;" -// -// To reset the foreground and background color (to default values) in one operation: -// Insert the ESCAPE_SEQ into your string, followed by ";" - -#define XCODE_COLORS_ESCAPE_SEQ "\033[" - -#define XCODE_COLORS_RESET_FG XCODE_COLORS_ESCAPE_SEQ "fg;" // Clear any foreground color -#define XCODE_COLORS_RESET_BG XCODE_COLORS_ESCAPE_SEQ "bg;" // Clear any background color -#define XCODE_COLORS_RESET XCODE_COLORS_ESCAPE_SEQ ";" // Clear any foreground or background color - -// Some simple defines to make life easier on ourself - -#if TARGET_OS_IPHONE - #define MakeColor(r, g, b) [UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f] -#else - #define MakeColor(r, g, b) [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f] -#endif - -#if TARGET_OS_IPHONE - #define OSColor UIColor -#else - #define OSColor NSColor -#endif - -// If running in a shell, not all RGB colors will be supported. -// In this case we automatically map to the closest available color. -// In order to provide this mapping, we have a hard-coded set of the standard RGB values available in the shell. -// However, not every shell is the same, and Apple likes to think different even when it comes to shell colors. -// -// Map to standard Terminal.app colors (1), or -// map to standard xterm colors (0). - -#define MAP_TO_TERMINAL_APP_COLORS 1 - - -@interface DDTTYLoggerColorProfile : NSObject { -@public - int mask; - int context; - - uint8_t fg_r; - uint8_t fg_g; - uint8_t fg_b; - - uint8_t bg_r; - uint8_t bg_g; - uint8_t bg_b; - - NSUInteger fgCodeIndex; - NSString *fgCodeRaw; - - NSUInteger bgCodeIndex; - NSString *bgCodeRaw; - - char fgCode[24]; - size_t fgCodeLen; - - char bgCode[24]; - size_t bgCodeLen; - - char resetCode[8]; - size_t resetCodeLen; -} - -- (id)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)mask context:(int)ctxt; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation DDTTYLogger - -static BOOL isaTTY; -static BOOL isaColorTTY; -static BOOL isaColor256TTY; -static BOOL isaXcodeColorTTY; - -static NSArray *codes_fg = nil; -static NSArray *codes_bg = nil; -static NSArray *colors = nil; - -static DDTTYLogger *sharedInstance; - -/** - * Initializes the colors array, as well as the codes_fg and codes_bg arrays, for 16 color mode. - * - * This method is used when the application is running from within a shell that only supports 16 color mode. - * This method is not invoked if the application is running within Xcode, or via normal UI app launch. -**/ -+ (void)initialize_colors_16 -{ - if (codes_fg || codes_bg || colors) return; - - NSMutableArray *m_codes_fg = [NSMutableArray arrayWithCapacity:16]; - NSMutableArray *m_codes_bg = [NSMutableArray arrayWithCapacity:16]; - NSMutableArray *m_colors = [NSMutableArray arrayWithCapacity:16]; - - // In a standard shell only 16 colors are supported. - // - // More information about ansi escape codes can be found online. - // http://en.wikipedia.org/wiki/ANSI_escape_code - - [m_codes_fg addObject:@"30m"]; // normal - black - [m_codes_fg addObject:@"31m"]; // normal - red - [m_codes_fg addObject:@"32m"]; // normal - green - [m_codes_fg addObject:@"33m"]; // normal - yellow - [m_codes_fg addObject:@"34m"]; // normal - blue - [m_codes_fg addObject:@"35m"]; // normal - magenta - [m_codes_fg addObject:@"36m"]; // normal - cyan - [m_codes_fg addObject:@"37m"]; // normal - gray - [m_codes_fg addObject:@"1;30m"]; // bright - darkgray - [m_codes_fg addObject:@"1;31m"]; // bright - red - [m_codes_fg addObject:@"1;32m"]; // bright - green - [m_codes_fg addObject:@"1;33m"]; // bright - yellow - [m_codes_fg addObject:@"1;34m"]; // bright - blue - [m_codes_fg addObject:@"1;35m"]; // bright - magenta - [m_codes_fg addObject:@"1;36m"]; // bright - cyan - [m_codes_fg addObject:@"1;37m"]; // bright - white - - [m_codes_bg addObject:@"40m"]; // normal - black - [m_codes_bg addObject:@"41m"]; // normal - red - [m_codes_bg addObject:@"42m"]; // normal - green - [m_codes_bg addObject:@"43m"]; // normal - yellow - [m_codes_bg addObject:@"44m"]; // normal - blue - [m_codes_bg addObject:@"45m"]; // normal - magenta - [m_codes_bg addObject:@"46m"]; // normal - cyan - [m_codes_bg addObject:@"47m"]; // normal - gray - [m_codes_bg addObject:@"1;40m"]; // bright - darkgray - [m_codes_bg addObject:@"1;41m"]; // bright - red - [m_codes_bg addObject:@"1;42m"]; // bright - green - [m_codes_bg addObject:@"1;43m"]; // bright - yellow - [m_codes_bg addObject:@"1;44m"]; // bright - blue - [m_codes_bg addObject:@"1;45m"]; // bright - magenta - [m_codes_bg addObject:@"1;46m"]; // bright - cyan - [m_codes_bg addObject:@"1;47m"]; // bright - white - -#if MAP_TO_TERMINAL_APP_COLORS - - // Standard Terminal.app colors: - // - // These are the default colors used by Apple's Terminal.app. - - [m_colors addObject:MakeColor( 0, 0, 0)]; // normal - black - [m_colors addObject:MakeColor(194, 54, 33)]; // normal - red - [m_colors addObject:MakeColor( 37, 188, 36)]; // normal - green - [m_colors addObject:MakeColor(173, 173, 39)]; // normal - yellow - [m_colors addObject:MakeColor( 73, 46, 225)]; // normal - blue - [m_colors addObject:MakeColor(211, 56, 211)]; // normal - magenta - [m_colors addObject:MakeColor( 51, 187, 200)]; // normal - cyan - [m_colors addObject:MakeColor(203, 204, 205)]; // normal - gray - [m_colors addObject:MakeColor(129, 131, 131)]; // bright - darkgray - [m_colors addObject:MakeColor(252, 57, 31)]; // bright - red - [m_colors addObject:MakeColor( 49, 231, 34)]; // bright - green - [m_colors addObject:MakeColor(234, 236, 35)]; // bright - yellow - [m_colors addObject:MakeColor( 88, 51, 255)]; // bright - blue - [m_colors addObject:MakeColor(249, 53, 248)]; // bright - magenta - [m_colors addObject:MakeColor( 20, 240, 240)]; // bright - cyan - [m_colors addObject:MakeColor(233, 235, 235)]; // bright - white - -#else - - // Standard xterm colors: - // - // These are the default colors used by most xterm shells. - - [m_colors addObject:MakeColor( 0, 0, 0)]; // normal - black - [m_colors addObject:MakeColor(205, 0, 0)]; // normal - red - [m_colors addObject:MakeColor( 0, 205, 0)]; // normal - green - [m_colors addObject:MakeColor(205, 205, 0)]; // normal - yellow - [m_colors addObject:MakeColor( 0, 0, 238)]; // normal - blue - [m_colors addObject:MakeColor(205, 0, 205)]; // normal - magenta - [m_colors addObject:MakeColor( 0, 205, 205)]; // normal - cyan - [m_colors addObject:MakeColor(229, 229, 229)]; // normal - gray - [m_colors addObject:MakeColor(127, 127, 127)]; // bright - darkgray - [m_colors addObject:MakeColor(255, 0, 0)]; // bright - red - [m_colors addObject:MakeColor( 0, 255, 0)]; // bright - green - [m_colors addObject:MakeColor(255, 255, 0)]; // bright - yellow - [m_colors addObject:MakeColor( 92, 92, 255)]; // bright - blue - [m_colors addObject:MakeColor(255, 0, 255)]; // bright - magenta - [m_colors addObject:MakeColor( 0, 255, 255)]; // bright - cyan - [m_colors addObject:MakeColor(255, 255, 255)]; // bright - white - -#endif - - codes_fg = [m_codes_fg copy]; - codes_bg = [m_codes_bg copy]; - colors = [m_colors copy]; - - NSAssert([codes_fg count] == [codes_bg count], @"Invalid colors/codes array(s)"); - NSAssert([codes_fg count] == [colors count], @"Invalid colors/codes array(s)"); -} - -/** - * Initializes the colors array, as well as the codes_fg and codes_bg arrays, for 256 color mode. - * - * This method is used when the application is running from within a shell that supports 256 color mode. - * This method is not invoked if the application is running within Xcode, or via normal UI app launch. -**/ -+ (void)initialize_colors_256 -{ - if (codes_fg || codes_bg || colors) return; - - NSMutableArray *m_codes_fg = [NSMutableArray arrayWithCapacity:(256-16)]; - NSMutableArray *m_codes_bg = [NSMutableArray arrayWithCapacity:(256-16)]; - NSMutableArray *m_colors = [NSMutableArray arrayWithCapacity:(256-16)]; - - #if MAP_TO_TERMINAL_APP_COLORS - - // Standard Terminal.app colors: - // - // These are the colors the Terminal.app uses in xterm-256color mode. - // In this mode, the terminal supports 256 different colors, specified by 256 color codes. - // - // The first 16 color codes map to the original 16 color codes supported by the earlier xterm-color mode. - // These are actually configurable, and thus we ignore them for the purposes of mapping, - // as we can't rely on them being constant. They are largely duplicated anyway. - // - // The next 216 color codes are designed to run the spectrum, with several shades of every color. - // While the color codes are standardized, the actual RGB values for each color code is not. - // Apple's Terminal.app uses different RGB values from that of a standard xterm. - // Apple's choices in colors are designed to be a little nicer on the eyes. - // - // The last 24 color codes represent a grayscale. - // - // Unfortunately, unlike the standard xterm color chart, - // Apple's RGB values cannot be calculated using a simple formula (at least not that I know of). - // Also, I don't know of any ways to programmatically query the shell for the RGB values. - // So this big giant color chart had to be made by hand. - // - // More information about ansi escape codes can be found online. - // http://en.wikipedia.org/wiki/ANSI_escape_code - - // Colors - - [m_colors addObject:MakeColor( 47, 49, 49)]; - [m_colors addObject:MakeColor( 60, 42, 144)]; - [m_colors addObject:MakeColor( 66, 44, 183)]; - [m_colors addObject:MakeColor( 73, 46, 222)]; - [m_colors addObject:MakeColor( 81, 50, 253)]; - [m_colors addObject:MakeColor( 88, 51, 255)]; - - [m_colors addObject:MakeColor( 42, 128, 37)]; - [m_colors addObject:MakeColor( 42, 127, 128)]; - [m_colors addObject:MakeColor( 44, 126, 169)]; - [m_colors addObject:MakeColor( 56, 125, 209)]; - [m_colors addObject:MakeColor( 59, 124, 245)]; - [m_colors addObject:MakeColor( 66, 123, 255)]; - - [m_colors addObject:MakeColor( 51, 163, 41)]; - [m_colors addObject:MakeColor( 39, 162, 121)]; - [m_colors addObject:MakeColor( 42, 161, 162)]; - [m_colors addObject:MakeColor( 53, 160, 202)]; - [m_colors addObject:MakeColor( 45, 159, 240)]; - [m_colors addObject:MakeColor( 58, 158, 255)]; - - [m_colors addObject:MakeColor( 31, 196, 37)]; - [m_colors addObject:MakeColor( 48, 196, 115)]; - [m_colors addObject:MakeColor( 39, 195, 155)]; - [m_colors addObject:MakeColor( 49, 195, 195)]; - [m_colors addObject:MakeColor( 32, 194, 235)]; - [m_colors addObject:MakeColor( 53, 193, 255)]; - - [m_colors addObject:MakeColor( 50, 229, 35)]; - [m_colors addObject:MakeColor( 40, 229, 109)]; - [m_colors addObject:MakeColor( 27, 229, 149)]; - [m_colors addObject:MakeColor( 49, 228, 189)]; - [m_colors addObject:MakeColor( 33, 228, 228)]; - [m_colors addObject:MakeColor( 53, 227, 255)]; - - [m_colors addObject:MakeColor( 27, 254, 30)]; - [m_colors addObject:MakeColor( 30, 254, 103)]; - [m_colors addObject:MakeColor( 45, 254, 143)]; - [m_colors addObject:MakeColor( 38, 253, 182)]; - [m_colors addObject:MakeColor( 38, 253, 222)]; - [m_colors addObject:MakeColor( 42, 253, 252)]; - - [m_colors addObject:MakeColor(140, 48, 40)]; - [m_colors addObject:MakeColor(136, 51, 136)]; - [m_colors addObject:MakeColor(135, 52, 177)]; - [m_colors addObject:MakeColor(134, 52, 217)]; - [m_colors addObject:MakeColor(135, 56, 248)]; - [m_colors addObject:MakeColor(134, 53, 255)]; - - [m_colors addObject:MakeColor(125, 125, 38)]; - [m_colors addObject:MakeColor(124, 125, 125)]; - [m_colors addObject:MakeColor(122, 124, 166)]; - [m_colors addObject:MakeColor(123, 124, 207)]; - [m_colors addObject:MakeColor(123, 122, 247)]; - [m_colors addObject:MakeColor(124, 121, 255)]; - - [m_colors addObject:MakeColor(119, 160, 35)]; - [m_colors addObject:MakeColor(117, 160, 120)]; - [m_colors addObject:MakeColor(117, 160, 160)]; - [m_colors addObject:MakeColor(115, 159, 201)]; - [m_colors addObject:MakeColor(116, 158, 240)]; - [m_colors addObject:MakeColor(117, 157, 255)]; - - [m_colors addObject:MakeColor(113, 195, 39)]; - [m_colors addObject:MakeColor(110, 194, 114)]; - [m_colors addObject:MakeColor(111, 194, 154)]; - [m_colors addObject:MakeColor(108, 194, 194)]; - [m_colors addObject:MakeColor(109, 193, 234)]; - [m_colors addObject:MakeColor(108, 192, 255)]; - - [m_colors addObject:MakeColor(105, 228, 30)]; - [m_colors addObject:MakeColor(103, 228, 109)]; - [m_colors addObject:MakeColor(105, 228, 148)]; - [m_colors addObject:MakeColor(100, 227, 188)]; - [m_colors addObject:MakeColor( 99, 227, 227)]; - [m_colors addObject:MakeColor( 99, 226, 253)]; - - [m_colors addObject:MakeColor( 92, 253, 34)]; - [m_colors addObject:MakeColor( 96, 253, 103)]; - [m_colors addObject:MakeColor( 97, 253, 142)]; - [m_colors addObject:MakeColor( 88, 253, 182)]; - [m_colors addObject:MakeColor( 93, 253, 221)]; - [m_colors addObject:MakeColor( 88, 254, 251)]; - - [m_colors addObject:MakeColor(177, 53, 34)]; - [m_colors addObject:MakeColor(174, 54, 131)]; - [m_colors addObject:MakeColor(172, 55, 172)]; - [m_colors addObject:MakeColor(171, 57, 213)]; - [m_colors addObject:MakeColor(170, 55, 249)]; - [m_colors addObject:MakeColor(170, 57, 255)]; - - [m_colors addObject:MakeColor(165, 123, 37)]; - [m_colors addObject:MakeColor(163, 123, 123)]; - [m_colors addObject:MakeColor(162, 123, 164)]; - [m_colors addObject:MakeColor(161, 122, 205)]; - [m_colors addObject:MakeColor(161, 121, 241)]; - [m_colors addObject:MakeColor(161, 121, 255)]; - - [m_colors addObject:MakeColor(158, 159, 33)]; - [m_colors addObject:MakeColor(157, 158, 118)]; - [m_colors addObject:MakeColor(157, 158, 159)]; - [m_colors addObject:MakeColor(155, 157, 199)]; - [m_colors addObject:MakeColor(155, 157, 239)]; - [m_colors addObject:MakeColor(154, 156, 255)]; - - [m_colors addObject:MakeColor(152, 193, 40)]; - [m_colors addObject:MakeColor(151, 193, 113)]; - [m_colors addObject:MakeColor(150, 193, 153)]; - [m_colors addObject:MakeColor(150, 192, 193)]; - [m_colors addObject:MakeColor(148, 192, 232)]; - [m_colors addObject:MakeColor(149, 191, 253)]; - - [m_colors addObject:MakeColor(146, 227, 28)]; - [m_colors addObject:MakeColor(144, 227, 108)]; - [m_colors addObject:MakeColor(144, 227, 147)]; - [m_colors addObject:MakeColor(144, 227, 187)]; - [m_colors addObject:MakeColor(142, 226, 227)]; - [m_colors addObject:MakeColor(142, 225, 252)]; - - [m_colors addObject:MakeColor(138, 253, 36)]; - [m_colors addObject:MakeColor(137, 253, 102)]; - [m_colors addObject:MakeColor(136, 253, 141)]; - [m_colors addObject:MakeColor(138, 254, 181)]; - [m_colors addObject:MakeColor(135, 255, 220)]; - [m_colors addObject:MakeColor(133, 255, 250)]; - - [m_colors addObject:MakeColor(214, 57, 30)]; - [m_colors addObject:MakeColor(211, 59, 126)]; - [m_colors addObject:MakeColor(209, 57, 168)]; - [m_colors addObject:MakeColor(208, 55, 208)]; - [m_colors addObject:MakeColor(207, 58, 247)]; - [m_colors addObject:MakeColor(206, 61, 255)]; - - [m_colors addObject:MakeColor(204, 121, 32)]; - [m_colors addObject:MakeColor(202, 121, 121)]; - [m_colors addObject:MakeColor(201, 121, 161)]; - [m_colors addObject:MakeColor(200, 120, 202)]; - [m_colors addObject:MakeColor(200, 120, 241)]; - [m_colors addObject:MakeColor(198, 119, 255)]; - - [m_colors addObject:MakeColor(198, 157, 37)]; - [m_colors addObject:MakeColor(196, 157, 116)]; - [m_colors addObject:MakeColor(195, 156, 157)]; - [m_colors addObject:MakeColor(195, 156, 197)]; - [m_colors addObject:MakeColor(194, 155, 236)]; - [m_colors addObject:MakeColor(193, 155, 255)]; - - [m_colors addObject:MakeColor(191, 192, 36)]; - [m_colors addObject:MakeColor(190, 191, 112)]; - [m_colors addObject:MakeColor(189, 191, 152)]; - [m_colors addObject:MakeColor(189, 191, 191)]; - [m_colors addObject:MakeColor(188, 190, 230)]; - [m_colors addObject:MakeColor(187, 190, 253)]; - - [m_colors addObject:MakeColor(185, 226, 28)]; - [m_colors addObject:MakeColor(184, 226, 106)]; - [m_colors addObject:MakeColor(183, 225, 146)]; - [m_colors addObject:MakeColor(183, 225, 186)]; - [m_colors addObject:MakeColor(182, 225, 225)]; - [m_colors addObject:MakeColor(181, 224, 252)]; - - [m_colors addObject:MakeColor(178, 255, 35)]; - [m_colors addObject:MakeColor(178, 255, 101)]; - [m_colors addObject:MakeColor(177, 254, 141)]; - [m_colors addObject:MakeColor(176, 254, 180)]; - [m_colors addObject:MakeColor(176, 254, 220)]; - [m_colors addObject:MakeColor(175, 253, 249)]; - - [m_colors addObject:MakeColor(247, 56, 30)]; - [m_colors addObject:MakeColor(245, 57, 122)]; - [m_colors addObject:MakeColor(243, 59, 163)]; - [m_colors addObject:MakeColor(244, 60, 204)]; - [m_colors addObject:MakeColor(242, 59, 241)]; - [m_colors addObject:MakeColor(240, 55, 255)]; - - [m_colors addObject:MakeColor(241, 119, 36)]; - [m_colors addObject:MakeColor(240, 120, 118)]; - [m_colors addObject:MakeColor(238, 119, 158)]; - [m_colors addObject:MakeColor(237, 119, 199)]; - [m_colors addObject:MakeColor(237, 118, 238)]; - [m_colors addObject:MakeColor(236, 118, 255)]; - - [m_colors addObject:MakeColor(235, 154, 36)]; - [m_colors addObject:MakeColor(235, 154, 114)]; - [m_colors addObject:MakeColor(234, 154, 154)]; - [m_colors addObject:MakeColor(232, 154, 194)]; - [m_colors addObject:MakeColor(232, 153, 234)]; - [m_colors addObject:MakeColor(232, 153, 255)]; - - [m_colors addObject:MakeColor(230, 190, 30)]; - [m_colors addObject:MakeColor(229, 189, 110)]; - [m_colors addObject:MakeColor(228, 189, 150)]; - [m_colors addObject:MakeColor(227, 189, 190)]; - [m_colors addObject:MakeColor(227, 189, 229)]; - [m_colors addObject:MakeColor(226, 188, 255)]; - - [m_colors addObject:MakeColor(224, 224, 35)]; - [m_colors addObject:MakeColor(223, 224, 105)]; - [m_colors addObject:MakeColor(222, 224, 144)]; - [m_colors addObject:MakeColor(222, 223, 184)]; - [m_colors addObject:MakeColor(222, 223, 224)]; - [m_colors addObject:MakeColor(220, 223, 253)]; - - [m_colors addObject:MakeColor(217, 253, 28)]; - [m_colors addObject:MakeColor(217, 253, 99)]; - [m_colors addObject:MakeColor(216, 252, 139)]; - [m_colors addObject:MakeColor(216, 252, 179)]; - [m_colors addObject:MakeColor(215, 252, 218)]; - [m_colors addObject:MakeColor(215, 251, 250)]; - - [m_colors addObject:MakeColor(255, 61, 30)]; - [m_colors addObject:MakeColor(255, 60, 118)]; - [m_colors addObject:MakeColor(255, 58, 159)]; - [m_colors addObject:MakeColor(255, 56, 199)]; - [m_colors addObject:MakeColor(255, 55, 238)]; - [m_colors addObject:MakeColor(255, 59, 255)]; - - [m_colors addObject:MakeColor(255, 117, 29)]; - [m_colors addObject:MakeColor(255, 117, 115)]; - [m_colors addObject:MakeColor(255, 117, 155)]; - [m_colors addObject:MakeColor(255, 117, 195)]; - [m_colors addObject:MakeColor(255, 116, 235)]; - [m_colors addObject:MakeColor(254, 116, 255)]; - - [m_colors addObject:MakeColor(255, 152, 27)]; - [m_colors addObject:MakeColor(255, 152, 111)]; - [m_colors addObject:MakeColor(254, 152, 152)]; - [m_colors addObject:MakeColor(255, 152, 192)]; - [m_colors addObject:MakeColor(254, 151, 231)]; - [m_colors addObject:MakeColor(253, 151, 253)]; - - [m_colors addObject:MakeColor(255, 187, 33)]; - [m_colors addObject:MakeColor(253, 187, 107)]; - [m_colors addObject:MakeColor(252, 187, 148)]; - [m_colors addObject:MakeColor(253, 187, 187)]; - [m_colors addObject:MakeColor(254, 187, 227)]; - [m_colors addObject:MakeColor(252, 186, 252)]; - - [m_colors addObject:MakeColor(252, 222, 34)]; - [m_colors addObject:MakeColor(251, 222, 103)]; - [m_colors addObject:MakeColor(251, 222, 143)]; - [m_colors addObject:MakeColor(250, 222, 182)]; - [m_colors addObject:MakeColor(251, 221, 222)]; - [m_colors addObject:MakeColor(252, 221, 252)]; - - [m_colors addObject:MakeColor(251, 252, 15)]; - [m_colors addObject:MakeColor(251, 252, 97)]; - [m_colors addObject:MakeColor(249, 252, 137)]; - [m_colors addObject:MakeColor(247, 252, 177)]; - [m_colors addObject:MakeColor(247, 253, 217)]; - [m_colors addObject:MakeColor(254, 255, 255)]; - - // Grayscale - - [m_colors addObject:MakeColor( 52, 53, 53)]; - [m_colors addObject:MakeColor( 57, 58, 59)]; - [m_colors addObject:MakeColor( 66, 67, 67)]; - [m_colors addObject:MakeColor( 75, 76, 76)]; - [m_colors addObject:MakeColor( 83, 85, 85)]; - [m_colors addObject:MakeColor( 92, 93, 94)]; - - [m_colors addObject:MakeColor(101, 102, 102)]; - [m_colors addObject:MakeColor(109, 111, 111)]; - [m_colors addObject:MakeColor(118, 119, 119)]; - [m_colors addObject:MakeColor(126, 127, 128)]; - [m_colors addObject:MakeColor(134, 136, 136)]; - [m_colors addObject:MakeColor(143, 144, 145)]; - - [m_colors addObject:MakeColor(151, 152, 153)]; - [m_colors addObject:MakeColor(159, 161, 161)]; - [m_colors addObject:MakeColor(167, 169, 169)]; - [m_colors addObject:MakeColor(176, 177, 177)]; - [m_colors addObject:MakeColor(184, 185, 186)]; - [m_colors addObject:MakeColor(192, 193, 194)]; - - [m_colors addObject:MakeColor(200, 201, 202)]; - [m_colors addObject:MakeColor(208, 209, 210)]; - [m_colors addObject:MakeColor(216, 218, 218)]; - [m_colors addObject:MakeColor(224, 226, 226)]; - [m_colors addObject:MakeColor(232, 234, 234)]; - [m_colors addObject:MakeColor(240, 242, 242)]; - - // Color codes - - int index = 16; - - while (index < 256) - { - [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]]; - [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]]; - - index++; - } - - #else - - // Standard xterm colors: - // - // These are the colors xterm shells use in xterm-256color mode. - // In this mode, the shell supports 256 different colors, specified by 256 color codes. - // - // The first 16 color codes map to the original 16 color codes supported by the earlier xterm-color mode. - // These are generally configurable, and thus we ignore them for the purposes of mapping, - // as we can't rely on them being constant. They are largely duplicated anyway. - // - // The next 216 color codes are designed to run the spectrum, with several shades of every color. - // The last 24 color codes represent a grayscale. - // - // While the color codes are standardized, the actual RGB values for each color code is not. - // However most standard xterms follow a well known color chart, - // which can easily be calculated using the simple formula below. - // - // More information about ansi escape codes can be found online. - // http://en.wikipedia.org/wiki/ANSI_escape_code - - int index = 16; - - int r; // red - int g; // green - int b; // blue - - int ri; // r increment - int gi; // g increment - int bi; // b increment - - // Calculate xterm colors (using standard algorithm) - - int r = 0; - int g = 0; - int b = 0; - - for (ri = 0; ri < 6; ri++) - { - r = (ri == 0) ? 0 : 95 + (40 * (ri - 1)); - - for (gi = 0; gi < 6; gi++) - { - g = (gi == 0) ? 0 : 95 + (40 * (gi - 1)); - - for (bi = 0; bi < 6; bi++) - { - b = (bi == 0) ? 0 : 95 + (40 * (bi - 1)); - - [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]]; - [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]]; - [m_colors addObject:MakeColor(r, g, b)]; - - index++; - } - } - } - - // Calculate xterm grayscale (using standard algorithm) - - r = 8; - g = 8; - b = 8; - - while (index < 256) - { - [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]]; - [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]]; - [m_colors addObject:MakeColor(r, g, b)]; - - r += 10; - g += 10; - b += 10; - - index++; - } - - #endif - - codes_fg = [m_codes_fg copy]; - codes_bg = [m_codes_bg copy]; - colors = [m_colors copy]; - - NSAssert([codes_fg count] == [codes_bg count], @"Invalid colors/codes array(s)"); - NSAssert([codes_fg count] == [colors count], @"Invalid colors/codes array(s)"); -} - -+ (void)getRed:(CGFloat *)rPtr green:(CGFloat *)gPtr blue:(CGFloat *)bPtr fromColor:(OSColor *)color -{ - #if TARGET_OS_IPHONE - - // iOS - - if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) - { - [color getRed:rPtr green:gPtr blue:bPtr alpha:NULL]; - } - else - { - // The method getRed:green:blue:alpha: was only available starting iOS 5. - // So in iOS 4 and earlier, we have to jump through hoops. - - CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); - - unsigned char pixel[4]; - CGContextRef context = CGBitmapContextCreate(&pixel, 1, 1, 8, 4, rgbColorSpace, kCGImageAlphaNoneSkipLast); - - CGContextSetFillColorWithColor(context, [color CGColor]); - CGContextFillRect(context, CGRectMake(0, 0, 1, 1)); - - if (rPtr) { *rPtr = pixel[0] / 255.0f; } - if (gPtr) { *gPtr = pixel[1] / 255.0f; } - if (bPtr) { *bPtr = pixel[2] / 255.0f; } - - CGContextRelease(context); - CGColorSpaceRelease(rgbColorSpace); - } - - #else - - // Mac OS X - - [color getRed:rPtr green:gPtr blue:bPtr alpha:NULL]; - - #endif -} - -/** - * Maps the given color to the closest available color supported by the shell. - * The shell may support 256 colors, or only 16. - * - * This method loops through the known supported color set, and calculates the closest color. - * The array index of that color, within the colors array, is then returned. - * This array index may also be used as the index within the codes_fg and codes_bg arrays. -**/ -+ (NSUInteger)codeIndexForColor:(OSColor *)inColor -{ - CGFloat inR, inG, inB; - [self getRed:&inR green:&inG blue:&inB fromColor:inColor]; - - NSUInteger bestIndex = 0; - CGFloat lowestDistance = 100.0f; - - NSUInteger i = 0; - for (OSColor *color in colors) - { - // Calculate Euclidean distance (lower value means closer to given color) - - CGFloat r, g, b; - [self getRed:&r green:&g blue:&b fromColor:color]; - - #if CGFLOAT_IS_DOUBLE - CGFloat distance = sqrt(pow(r-inR, 2.0) + pow(g-inG, 2.0) + pow(b-inB, 2.0)); - #else - CGFloat distance = sqrtf(powf(r-inR, 2.0f) + powf(g-inG, 2.0f) + powf(b-inB, 2.0f)); - #endif - - NSLogVerbose(@"DDTTYLogger: %3lu : %.3f,%.3f,%.3f & %.3f,%.3f,%.3f = %.6f", - (unsigned long)i, inR, inG, inB, r, g, b, distance); - - if (distance < lowestDistance) - { - bestIndex = i; - lowestDistance = distance; - - NSLogVerbose(@"DDTTYLogger: New best index = %lu", (unsigned long)bestIndex); - } - - i++; - } - - return bestIndex; -} - -/** - * The runtime sends initialize to each class in a program exactly one time just before the class, - * or any class that inherits from it, is sent its first message from within the program. (Thus the - * method may never be invoked if the class is not used.) The runtime sends the initialize message to - * classes in a thread-safe manner. Superclasses receive this message before their subclasses. - * - * This method may also be called directly (assumably by accident), hence the safety mechanism. -**/ -+ (void)initialize -{ - static BOOL initialized = NO; - if (!initialized) - { - initialized = YES; - - isaTTY = isatty(STDERR_FILENO); - - char *term = getenv("TERM"); - if (term) - { - if (strcasestr(term, "color") != NULL) - { - isaColorTTY = YES; - isaColor256TTY = (strcasestr(term, "256") != NULL); - - if (isaColor256TTY) - [self initialize_colors_256]; - else - [self initialize_colors_16]; - } - } - else - { - // Xcode does NOT natively support colors in the Xcode debugging console. - // You'll need to install the XcodeColors plugin to see colors in the Xcode console. - // - // PS - Please read the header file before diving into the source code. - - char *xcode_colors = getenv("XcodeColors"); - if (xcode_colors && (strcmp(xcode_colors, "YES") == 0)) - { - isaXcodeColorTTY = YES; - } - } - - NSLogInfo(@"DDTTYLogger: isaColorTTY = %@", (isaColorTTY ? @"YES" : @"NO")); - NSLogInfo(@"DDTTYLogger: isaColor256TTY: %@", (isaColor256TTY ? @"YES" : @"NO")); - NSLogInfo(@"DDTTYLogger: isaXcodeColorTTY: %@", (isaXcodeColorTTY ? @"YES" : @"NO")); - - sharedInstance = [[DDTTYLogger alloc] init]; - } -} - -+ (DDTTYLogger *)sharedInstance -{ - return sharedInstance; -} - -- (id)init -{ - if (sharedInstance != nil) - { - return nil; - } - - if ((self = [super init])) - { - if (isaTTY) - { - calendar = [NSCalendar autoupdatingCurrentCalendar]; - - calendarUnitFlags = 0; - calendarUnitFlags |= NSYearCalendarUnit; - calendarUnitFlags |= NSMonthCalendarUnit; - calendarUnitFlags |= NSDayCalendarUnit; - calendarUnitFlags |= NSHourCalendarUnit; - calendarUnitFlags |= NSMinuteCalendarUnit; - calendarUnitFlags |= NSSecondCalendarUnit; - - // Initialze 'app' variable (char *) - - appName = [[NSProcessInfo processInfo] processName]; - - appLen = [appName lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - app = (char *)malloc(appLen + 1); - - [appName getCString:app maxLength:(appLen+1) encoding:NSUTF8StringEncoding]; - - // Initialize 'pid' variable (char *) - - processID = [NSString stringWithFormat:@"%i", (int)getpid()]; - - pidLen = [processID lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - pid = (char *)malloc(pidLen + 1); - - [processID getCString:pid maxLength:(pidLen+1) encoding:NSUTF8StringEncoding]; - - // Initialize color stuff - - colorsEnabled = NO; - colorProfilesArray = [[NSMutableArray alloc] initWithCapacity:8]; - colorProfilesDict = [[NSMutableDictionary alloc] initWithCapacity:8]; - } - } - return self; -} - -- (void)loadDefaultColorProfiles -{ - [self setForegroundColor:MakeColor(214, 57, 30) backgroundColor:nil forFlag:LOG_FLAG_ERROR]; - [self setForegroundColor:MakeColor(204, 121, 32) backgroundColor:nil forFlag:LOG_FLAG_WARN]; -} - -- (BOOL)colorsEnabled -{ - // The design of this method is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - return colorsEnabled; - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - __block BOOL result; - - dispatch_sync(globalLoggingQueue, ^{ - dispatch_sync(loggerQueue, ^{ - result = colorsEnabled; - }); - }); - - return result; - } -} - -- (void)setColorsEnabled:(BOOL)newColorsEnabled -{ - dispatch_block_t block = ^{ @autoreleasepool { - - colorsEnabled = newColorsEnabled; - - if ([colorProfilesArray count] == 0) { - [self loadDefaultColorProfiles]; - } - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)setForegroundColor:(OSColor *)txtColor backgroundColor:(OSColor *)bgColor forFlag:(int)mask -{ - [self setForegroundColor:txtColor backgroundColor:bgColor forFlag:mask context:0]; -} - -- (void)setForegroundColor:(OSColor *)txtColor backgroundColor:(OSColor *)bgColor forFlag:(int)mask context:(int)ctxt -{ - dispatch_block_t block = ^{ @autoreleasepool { - - DDTTYLoggerColorProfile *newColorProfile = - [[DDTTYLoggerColorProfile alloc] initWithForegroundColor:txtColor - backgroundColor:bgColor - flag:mask - context:ctxt]; - - NSLogInfo(@"DDTTYLogger: newColorProfile: %@", newColorProfile); - - NSUInteger i = 0; - for (DDTTYLoggerColorProfile *colorProfile in colorProfilesArray) - { - if ((colorProfile->mask == mask) && (colorProfile->context == ctxt)) - { - break; - } - - i++; - } - - if (i < [colorProfilesArray count]) - [colorProfilesArray replaceObjectAtIndex:i withObject:newColorProfile]; - else - [colorProfilesArray addObject:newColorProfile]; - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)setForegroundColor:(OSColor *)txtColor backgroundColor:(OSColor *)bgColor forTag:(id )tag -{ - NSAssert([(id )tag conformsToProtocol:@protocol(NSCopying)], @"Invalid tag"); - - dispatch_block_t block = ^{ @autoreleasepool { - - DDTTYLoggerColorProfile *newColorProfile = - [[DDTTYLoggerColorProfile alloc] initWithForegroundColor:txtColor - backgroundColor:bgColor - flag:0 - context:0]; - - NSLogInfo(@"DDTTYLogger: newColorProfile: %@", newColorProfile); - - [colorProfilesDict setObject:newColorProfile forKey:tag]; - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)clearColorsForFlag:(int)mask -{ - [self clearColorsForFlag:mask context:0]; -} - -- (void)clearColorsForFlag:(int)mask context:(int)context -{ - dispatch_block_t block = ^{ @autoreleasepool { - - NSUInteger i = 0; - for (DDTTYLoggerColorProfile *colorProfile in colorProfilesArray) - { - if ((colorProfile->mask == mask) && (colorProfile->context == context)) - { - break; - } - - i++; - } - - if (i < [colorProfilesArray count]) - { - [colorProfilesArray removeObjectAtIndex:i]; - } - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)clearColorsForTag:(id )tag -{ - NSAssert([(id )tag conformsToProtocol:@protocol(NSCopying)], @"Invalid tag"); - - dispatch_block_t block = ^{ @autoreleasepool { - - [colorProfilesDict removeObjectForKey:tag]; - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)clearColorsForAllFlags -{ - dispatch_block_t block = ^{ @autoreleasepool { - - [colorProfilesArray removeAllObjects]; - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)clearColorsForAllTags -{ - dispatch_block_t block = ^{ @autoreleasepool { - - [colorProfilesDict removeAllObjects]; - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)clearAllColors -{ - dispatch_block_t block = ^{ @autoreleasepool { - - [colorProfilesArray removeAllObjects]; - [colorProfilesDict removeAllObjects]; - }}; - - // The design of the setter logic below is taken from the DDAbstractLogger implementation. - // For documentation please refer to the DDAbstractLogger implementation. - - dispatch_queue_t currentQueue = dispatch_get_current_queue(); - if (currentQueue == loggerQueue) - { - block(); - } - else - { - dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue]; - NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure"); - - dispatch_async(globalLoggingQueue, ^{ - dispatch_async(loggerQueue, block); - }); - } -} - -- (void)logMessage:(DDLogMessage *)logMessage -{ - if (!isaTTY) return; - - NSString *logMsg = logMessage->logMsg; - BOOL isFormatted = NO; - - if (formatter) - { - logMsg = [formatter formatLogMessage:logMessage]; - isFormatted = logMsg != logMessage->logMsg; - } - - if (logMsg) - { - // Search for a color profile associated with the log message - - DDTTYLoggerColorProfile *colorProfile = nil; - - if (colorsEnabled) - { - if (logMessage->tag) - { - colorProfile = [colorProfilesDict objectForKey:logMessage->tag]; - } - if (colorProfile == nil) - { - for (DDTTYLoggerColorProfile *cp in colorProfilesArray) - { - if ((logMessage->logFlag & cp->mask) && (logMessage->logContext == cp->context)) - { - colorProfile = cp; - break; - } - } - } - } - - // Convert log message to C string. - // - // We use the stack instead of the heap for speed if possible. - // But we're extra cautious to avoid a stack overflow. - - NSUInteger msgLen = [logMsg lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - const BOOL useStack = msgLen < (1024 * 4); - - char msgStack[useStack ? (msgLen + 1) : 1]; // Analyzer doesn't like zero-size array, hence the 1 - char *msg = useStack ? msgStack : (char *)malloc(msgLen + 1); - - [logMsg getCString:msg maxLength:(msgLen + 1) encoding:NSUTF8StringEncoding]; - - // Write the log message to STDERR - - if (isFormatted) - { - // The log message has already been formatted. - - struct iovec v[4]; - - if (colorProfile) - { - v[0].iov_base = colorProfile->fgCode; - v[0].iov_len = colorProfile->fgCodeLen; - - v[3].iov_base = colorProfile->resetCode; - v[3].iov_len = colorProfile->resetCodeLen; - } - else - { - v[0].iov_base = ""; - v[0].iov_len = 0; - - v[3].iov_base = ""; - v[3].iov_len = 0; - } - - v[1].iov_base = (char *)msg; - v[1].iov_len = msgLen; - - v[2].iov_base = "\n"; - v[2].iov_len = (msg[msgLen] == '\n') ? 0 : 1; - - writev(STDERR_FILENO, v, 4); - } - else - { - // The log message is unformatted, so apply standard NSLog style formatting. - - int len; - - // Calculate timestamp. - // The technique below is faster than using NSDateFormatter. - - NSDateComponents *components = [calendar components:calendarUnitFlags fromDate:logMessage->timestamp]; - - NSTimeInterval epoch = [logMessage->timestamp timeIntervalSinceReferenceDate]; - int milliseconds = (int)((epoch - floor(epoch)) * 1000); - - char ts[24]; - len = snprintf(ts, 24, "%04ld-%02ld-%02ld %02ld:%02ld:%02ld:%03d", // yyyy-MM-dd HH:mm:ss:SSS - (long)components.year, - (long)components.month, - (long)components.day, - (long)components.hour, - (long)components.minute, - (long)components.second, milliseconds); - - size_t tsLen = MIN(24-1, len); - - // Calculate thread ID - // - // How many characters do we need for the thread id? - // logMessage->machThreadID is of type mach_port_t, which is an unsigned int. - // - // 1 hex char = 4 bits - // 8 hex chars for 32 bit, plus ending '\0' = 9 - - char tid[9]; - len = snprintf(tid, 9, "%x", logMessage->machThreadID); - - size_t tidLen = MIN(9-1, len); - - // Here is our format: "%s %s[%i:%s] %s", timestamp, appName, processID, threadID, logMsg - - struct iovec v[12]; - - if (colorProfile) - { - v[0].iov_base = colorProfile->fgCode; - v[0].iov_len = colorProfile->fgCodeLen; - - v[11].iov_base = colorProfile->resetCode; - v[11].iov_len = colorProfile->resetCodeLen; - } - else - { - v[0].iov_base = ""; - v[0].iov_len = 0; - - v[11].iov_base = ""; - v[11].iov_len = 0; - } - - v[1].iov_base = ts; - v[1].iov_len = tsLen; - - v[2].iov_base = " "; - v[2].iov_len = 1; - - v[3].iov_base = app; - v[3].iov_len = appLen; - - v[4].iov_base = "["; - v[4].iov_len = 1; - - v[5].iov_base = pid; - v[5].iov_len = pidLen; - - v[6].iov_base = ":"; - v[6].iov_len = 1; - - v[7].iov_base = tid; - v[7].iov_len = MIN((size_t)8, tidLen); // snprintf doesn't return what you might think - - v[8].iov_base = "] "; - v[8].iov_len = 2; - - v[9].iov_base = (char *)msg; - v[9].iov_len = msgLen; - - v[10].iov_base = "\n"; - v[10].iov_len = (msg[msgLen] == '\n') ? 0 : 1; - - writev(STDERR_FILENO, v, 12); - } - - if (!useStack) { - free(msg); - } - } -} - -- (NSString *)loggerName -{ - return @"cocoa.lumberjack.ttyLogger"; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation DDTTYLoggerColorProfile - -- (id)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)aMask context:(int)ctxt -{ - if ((self = [super init])) - { - mask = aMask; - context = ctxt; - - CGFloat r, g, b; - - if (fgColor) - { - [DDTTYLogger getRed:&r green:&g blue:&b fromColor:fgColor]; - - fg_r = (uint8_t)(r * 255.0f); - fg_g = (uint8_t)(g * 255.0f); - fg_b = (uint8_t)(b * 255.0f); - } - if (bgColor) - { - [DDTTYLogger getRed:&r green:&g blue:&b fromColor:bgColor]; - - bg_r = (uint8_t)(r * 255.0f); - bg_g = (uint8_t)(g * 255.0f); - bg_b = (uint8_t)(b * 255.0f); - } - - if (fgColor && isaColorTTY) - { - // Map foreground color to closest available shell color - - fgCodeIndex = [DDTTYLogger codeIndexForColor:fgColor]; - fgCodeRaw = [codes_fg objectAtIndex:fgCodeIndex]; - - NSString *escapeSeq = @"\033["; - - NSUInteger len1 = [escapeSeq lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - NSUInteger len2 = [fgCodeRaw lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - - [escapeSeq getCString:(fgCode) maxLength:(len1+1) encoding:NSUTF8StringEncoding]; - [fgCodeRaw getCString:(fgCode+len1) maxLength:(len2+1) encoding:NSUTF8StringEncoding]; - - fgCodeLen = len1+len2; - } - else if (fgColor && isaXcodeColorTTY) - { - // Convert foreground color to color code sequence - - const char *escapeSeq = XCODE_COLORS_ESCAPE_SEQ; - - int result = snprintf(fgCode, 24, "%sfg%u,%u,%u;", escapeSeq, fg_r, fg_g, fg_b); - fgCodeLen = MIN(result, (24-1)); - } - else - { - // No foreground color or no color support - - fgCode[0] = '\0'; - fgCodeLen = 0; - } - - if (bgColor && isaColorTTY) - { - // Map background color to closest available shell color - - bgCodeIndex = [DDTTYLogger codeIndexForColor:bgColor]; - bgCodeRaw = [codes_bg objectAtIndex:bgCodeIndex]; - - NSString *escapeSeq = @"\033["; - - NSUInteger len1 = [escapeSeq lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - NSUInteger len2 = [bgCodeRaw lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - - [escapeSeq getCString:(bgCode) maxLength:(len1+1) encoding:NSUTF8StringEncoding]; - [bgCodeRaw getCString:(bgCode+len1) maxLength:(len2+1) encoding:NSUTF8StringEncoding]; - - bgCodeLen = len1+len2; - } - else if (bgColor && isaXcodeColorTTY) - { - // Convert background color to color code sequence - - const char *escapeSeq = XCODE_COLORS_ESCAPE_SEQ; - - int result = snprintf(bgCode, 24, "%sbg%u,%u,%u;", escapeSeq, bg_r, bg_g, bg_b); - bgCodeLen = MIN(result, (24-1)); - } - else - { - // No background color or no color support - - bgCode[0] = '\0'; - bgCodeLen = 0; - } - - if (isaColorTTY) - { - resetCodeLen = snprintf(resetCode, 8, "\033[0m"); - } - else if (isaXcodeColorTTY) - { - resetCodeLen = snprintf(resetCode, 8, XCODE_COLORS_RESET); - } - else - { - resetCode[0] = '\0'; - resetCodeLen = 0; - } - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat: - @"", - self, mask, context, fg_r, fg_g, fg_b, bg_r, bg_g, bg_b, fgCodeRaw, bgCodeRaw]; -} - -@end 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..c1ee8516e --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/SettingsView.xib @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..8cc491b89 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m @@ -0,0 +1,482 @@ +// +// 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 NSPredicate * XCCXcodeCappNibToIgnorePredicate = nil; +static NSString * const XCCDirectoriesToIgnorePattern = @"^(?:Build|F(?:rameworks|oundation)|AppKit|Objective-J|(?:Browser|CommonJS)\\.environment|XcodeSupport|.+\\.xcodeproj)$"; +static NSString * const XCCXcodeCappNibToIgnorePattern = @"^/Applications/XcodeCapp.app/.*$"; + +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]; + XCCXcodeCappNibToIgnorePredicate = [NSPredicate predicateWithFormat:@"SELF matches %@", XCCXcodeCappNibToIgnorePattern]; + + 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; + + // This is a bit tricky, is to avoid to fetch nib of a compiled XcodeCapp + if ([XCCXcodeCappNibToIgnorePredicate evaluateWithObject:aPath]) + return YES; + + 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]) + { + NSLog(@"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]; + + NSLog(@"Content of xcodecapp-ignorepath correctly updated %@", self.ignoredPathPredicates); + } + @catch(NSException *exception) + { + NSLog(@"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..28aaff1b1 --- /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; + + NSLog(@"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 +{ + NSLog(@"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) + { + NSLog(@"No compatibility version in project"); + return NO; + } + + NSLog(@"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]; + + NSLog(@"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]; + + NSLog(@".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 +{ + NSLog(@"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 +{ + NSLog(@"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); + + NSLog(@"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; + + NSLog(@"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) + { + NSLog(@"Watched path changed: %@", path); + + [self _handleProjectPathChange:path]; + return; + } + + BOOL isHistoryDoneSentinalEvent = (flags & kFSEventStreamEventFlagHistoryDone) != 0; + + if (isHistoryDoneSentinalEvent) + { + NSLog(@"History done sentinal event"); + continue; + } + + BOOL isMountEvent = (flags & kFSEventStreamEventFlagMount) || (flags & kFSEventStreamEventFlagUnmount); + + if (isMountEvent) + { + NSLog(@"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]) + { + NSLog(@"Renamed directory: %@", path); + + [renamedDirectories addObject:path]; + } + + continue; + } + else if ((isFile || isSymlink) && + (created || modified || renamed || removed || inodeMetaModified) && + [XCCCappuccinoProject isSourceFile:path cappuccinoProject:self.cappuccinoProject]) + { + NSLog(@"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]) + { + NSLog(@"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]) + { + NSLog(@"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 +{ + NSLog(@"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]; + + NSLog(@"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) + { + NSLog(@"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..82da11a05 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m @@ -0,0 +1,166 @@ +// +// 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; + [self->operationsProgressIndicator stopAnimation:self]; + 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]; + [self->operationsProgressIndicator stopAnimation:self]; + } + 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 startAnimation:self]; + [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..0fcd79557 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h @@ -0,0 +1,29 @@ +// +// 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; +@property BOOL selected; + +- (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..10d71a5de --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m @@ -0,0 +1,196 @@ +// +// 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 +{ + if (!_selected) + return; + + [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..847d9aa5e --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCMainController.m @@ -0,0 +1,512 @@ +// +// 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 +{ + NSLog(@"Start : selecting last selected project"); + + NSString *lastSelectedProjectPath = [[NSUserDefaults standardUserDefaults] valueForKey:XCCUserDefaultsSelectedProjectPath]; + + [self _selectCappuccinoProjectControllerWithPath:lastSelectedProjectPath]; + + NSLog(@"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 +{ + NSLog(@"restore managed projects"); + self.cappuccinoProjectControllers = [@[] mutableCopy]; + + NSArray *projectHistory = [[NSUserDefaults standardUserDefaults] arrayForKey:XCCUserDefaultsManagedProjects]; + NSFileManager *fm = [NSFileManager defaultManager]; + NSMutableArray *missingProjects = [@[] mutableCopy]; + + for (NSString *path in projectHistory) + { + NSLog(@"Checking previously managed project at path: %@", path); + if (![fm fileExistsAtPath:path isDirectory:nil]) + { + [missingProjects addObject:path]; + NSLog(@"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]; + } + + NSLog(@"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) + { + [_operationsViewController setSelected:NO]; + [_errorsViewController setSelected:NO]; + [self->tabViewProject selectTabViewItemAtIndex:0]; + } + else if (sender == self->buttonSelectErrorsTab) + { + [_operationsViewController setSelected:NO]; + [_errorsViewController setSelected:YES]; + [self->tabViewProject selectTabViewItemAtIndex:1]; + [_errorsViewController reload]; + } + else if (sender == self->buttonSelectOperationsTab) + { + [_operationsViewController setSelected:YES]; + [_errorsViewController setSelected:NO]; + [self->tabViewProject selectTabViewItemAtIndex:2]; + [_operationsViewController reload]; + } + +} + + +#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..3353e3c2f --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h @@ -0,0 +1,28 @@ +// +// 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; +@property BOOL selected; + +- (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..8db695a22 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m @@ -0,0 +1,119 @@ +// +// 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 +{ + if (!_selected) + return; + + [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..bdddd1757 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m @@ -0,0 +1,127 @@ +// +// 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]; + + NSLog(@"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; + } + + NSLog(@"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]; + NSLog(@"Pbx creation failed: %@", exception); + } + @finally + { + __block XCCPPXOperation *weakOperation = self; + + self.completionBlock = ^{ + [weakOperation dispatchNotificationName:XCCPBXOperationDidEndNotification]; + [weakOperation setCompletionBlock:nil]; + }; + } + + NSLog(@"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..7e02e0732 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m @@ -0,0 +1,229 @@ + +// 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 +{ + NSLog(@"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 +{ + NSLog(@"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) + { + NSLog(@"Conversion failed: %@", exception); + } + @finally + { + __block XCCSourceProcessingOperation *weakOperation = self; + + self.completionBlock = ^{ + [weakOperation dispatchNotificationName:XCCConversionDidEndNotification]; + [weakOperation setCompletionBlock:nil]; + }; + } + + NSLog(@"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..d72357337 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m @@ -0,0 +1,171 @@ +// +// 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]) + { + NSLog(@"%@: 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]) + { + NSLog(@"%@: symlinked directory: %@ -> %@", self.cappuccinoProject.name, projectRelativePath, realPath); + + NSMutableDictionary *info = [self operationInformations]; + info[@"sourcePath"] = realPath; + info[@"projectPath"] = fullProjectPath; + + [self dispatchNotificationName:XCCNeedSourceToProjectPathMappingNotification userInfo:info]; + } + else + NSLog(@"%@: ignored symlinked directory: %@", self.cappuccinoProject.name, projectRelativePath); + } + + NSLog(@"%@: 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]) + { + NSLog(@"%@: 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 +{ + NSLog(@"Finding source files started"); + + NSArray *sourcesPaths; + + [self dispatchNotificationName:XCCSourcesFinderOperationDidStartNotification userInfo:@{@"cappuccinoProject": self.cappuccinoProject, @"sourcePaths" : @[]}]; + + @try + { + sourcesPaths = [self _findSourceFilesAtProjectPath:self->searchPath]; + } + @catch (NSException *exception) + { + NSLog(@"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}]; + [weakOperation setCompletionBlock:nil]; + }; + } + + NSLog(@"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..fccecd51c --- /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"]; + + NSLog(@"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) + { + NSLog(@"Could not find executable in PATH: %@", self.environment[@"PATH"]); + return NO; + } + + self.executablePaths = (NSMutableDictionary*)[NSJSONSerialization JSONObjectWithData:[taskResult[@"response"] dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]; + + NSLog(@"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]; + + NSLog(@"Task launched: %@\n%@", aTask.launchPath, aTask.arguments); + + if (returnType != kTaskReturnTypeNone) + { + [aTask waitUntilExit]; + + NSLog(@"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]; + + NSLog(@"Task launched: %@\n%@", launchPath, arguments); + + [task waitUntilExit]; + + NSLog(@"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]; + + NSLog(@"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]; + + NSLog(@"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..d7bde1639 --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h @@ -0,0 +1,19 @@ +// +// 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 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..f4c86a06a --- /dev/null +++ b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m @@ -0,0 +1,14 @@ +// +// 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 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-Prefix.pch b/Tools/XcodeCapp/XcodeCapp/XcodeCapp-Prefix.pch index 92f4e2158..c3ac0cfad 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp-Prefix.pch +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp-Prefix.pch @@ -4,13 +4,4 @@ #ifdef __OBJC__ #import - #import "DDLog.h" - -#if DEBUG - #import "DDTTYLogger.h" -#else - #import "DDASLLogger.h" -#endif - - #import "DDLogLevel.h" #endif 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..0a3a31b49 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m @@ -28,13 +28,17 @@ static const char *kCloseXcodeProjectScript = @implementation XcodeProjectCloser + (void)closeXcodeProjectForProject:(NSString *)projectPath -{ - NSString *format = [NSString stringWithUTF8String:kCloseXcodeProjectScript]; - NSString *source = [NSString stringWithFormat:format, projectPath]; - NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source]; - - NSAppleEventDescriptor *descriptor; - descriptor = [script executeAndReturnError:nil]; +{ + NSString *format = @(kCloseXcodeProjectScript); + NSString *source = [NSString stringWithFormat:format, projectPath]; + NSString *arguments = [NSString stringWithFormat:@"-e %@", source]; + NSTask *task = [[NSTask alloc] init]; + + [task setLaunchPath:@"/usr/bin/osascript"]; + [task setArguments:[NSArray arrayWithObjects:arguments, nil]]; + [task launch]; + + NSLog(@"Osascript launched for the project %@", projectPath); } @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/Resources/Templates/Application/Jakefile b/Tools/capp/Resources/Templates/Application/Jakefile index 08a8c0c8b..a25464947 100644 --- a/Tools/capp/Resources/Templates/Application/Jakefile +++ b/Tools/capp/Resources/Templates/Application/Jakefile @@ -40,7 +40,7 @@ app (projectName, function(task) if (configuration === "Debug") task.setCompilerFlags("-DDEBUG -g"); else - task.setCompilerFlags("-O"); + task.setCompilerFlags("-O2"); }); task ("default", [projectName], function() diff --git a/Tools/capp/Resources/Templates/Application/index-debug.html b/Tools/capp/Resources/Templates/Application/index-debug.html index d862fd07e..652466be6 100644 --- a/Tools/capp/Resources/Templates/Application/index-debug.html +++ b/Tools/capp/Resources/Templates/Application/index-debug.html @@ -33,6 +33,18 @@