Show More
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 |
@@ -0,0 +1,425 b'' | |||||
|
1 | # encoding: utf-8 | |||
|
2 | # -*- test-case-name: IPython.frontend.cocoa.tests.test_cocoa_frontend -*- | |||
|
3 | ||||
|
4 | """PyObjC classes to provide a Cocoa frontend to the | |||
|
5 | IPython.kernel.engineservice.IEngineBase. | |||
|
6 | ||||
|
7 | To add an IPython interpreter to a cocoa app, instantiate an | |||
|
8 | IPythonCocoaController in a XIB and connect its textView outlet to an | |||
|
9 | NSTextView instance in your UI. That's it. | |||
|
10 | ||||
|
11 | Author: Barry Wark | |||
|
12 | """ | |||
|
13 | ||||
|
14 | __docformat__ = "restructuredtext en" | |||
|
15 | ||||
|
16 | #----------------------------------------------------------------------------- | |||
|
17 | # Copyright (C) 2008 The IPython Development Team | |||
|
18 | # | |||
|
19 | # Distributed under the terms of the BSD License. The full license is in | |||
|
20 | # the file COPYING, distributed as part of this software. | |||
|
21 | #----------------------------------------------------------------------------- | |||
|
22 | ||||
|
23 | #----------------------------------------------------------------------------- | |||
|
24 | # Imports | |||
|
25 | #----------------------------------------------------------------------------- | |||
|
26 | ||||
|
27 | import objc | |||
|
28 | import uuid | |||
|
29 | ||||
|
30 | from Foundation import NSObject, NSMutableArray, NSMutableDictionary,\ | |||
|
31 | NSLog, NSNotificationCenter, NSMakeRange,\ | |||
|
32 | NSLocalizedString, NSIntersectionRange | |||
|
33 | ||||
|
34 | from AppKit import NSApplicationWillTerminateNotification, NSBeep,\ | |||
|
35 | NSTextView, NSRulerView, NSVerticalRuler | |||
|
36 | ||||
|
37 | from pprint import saferepr | |||
|
38 | ||||
|
39 | import IPython | |||
|
40 | from IPython.kernel.engineservice import ThreadedEngineService | |||
|
41 | from IPython.frontend.frontendbase import FrontEndBase | |||
|
42 | ||||
|
43 | from twisted.internet.threads import blockingCallFromThread | |||
|
44 | from twisted.python.failure import Failure | |||
|
45 | ||||
|
46 | #------------------------------------------------------------------------------ | |||
|
47 | # Classes to implement the Cocoa frontend | |||
|
48 | #------------------------------------------------------------------------------ | |||
|
49 | ||||
|
50 | # TODO: | |||
|
51 | # 1. use MultiEngineClient and out-of-process engine rather than | |||
|
52 | # ThreadedEngineService? | |||
|
53 | # 2. integrate Xgrid launching of engines | |||
|
54 | ||||
|
55 | ||||
|
56 | ||||
|
57 | ||||
|
58 | class IPythonCocoaController(NSObject, FrontEndBase): | |||
|
59 | userNS = objc.ivar() #mirror of engine.user_ns (key=>str(value)) | |||
|
60 | waitingForEngine = objc.ivar().bool() | |||
|
61 | textView = objc.IBOutlet() | |||
|
62 | ||||
|
63 | def init(self): | |||
|
64 | self = super(IPythonCocoaController, self).init() | |||
|
65 | FrontEndBase.__init__(self, engine=ThreadedEngineService()) | |||
|
66 | if(self != None): | |||
|
67 | self._common_init() | |||
|
68 | ||||
|
69 | return self | |||
|
70 | ||||
|
71 | def _common_init(self): | |||
|
72 | """_common_init""" | |||
|
73 | ||||
|
74 | self.userNS = NSMutableDictionary.dictionary() | |||
|
75 | self.waitingForEngine = False | |||
|
76 | ||||
|
77 | self.lines = {} | |||
|
78 | self.tabSpaces = 4 | |||
|
79 | self.tabUsesSpaces = True | |||
|
80 | self.currentBlockID = self.next_block_ID() | |||
|
81 | self.blockRanges = {} # blockID=>NSRange | |||
|
82 | ||||
|
83 | ||||
|
84 | def awakeFromNib(self): | |||
|
85 | """awakeFromNib""" | |||
|
86 | ||||
|
87 | self._common_init() | |||
|
88 | ||||
|
89 | # Start the IPython engine | |||
|
90 | self.engine.startService() | |||
|
91 | NSLog('IPython engine started') | |||
|
92 | ||||
|
93 | # Register for app termination | |||
|
94 | nc = NSNotificationCenter.defaultCenter() | |||
|
95 | nc.addObserver_selector_name_object_( | |||
|
96 | self, | |||
|
97 | 'appWillTerminate:', | |||
|
98 | NSApplicationWillTerminateNotification, | |||
|
99 | None) | |||
|
100 | ||||
|
101 | self.textView.setDelegate_(self) | |||
|
102 | self.textView.enclosingScrollView().setHasVerticalRuler_(True) | |||
|
103 | r = NSRulerView.alloc().initWithScrollView_orientation_( | |||
|
104 | self.textView.enclosingScrollView(), | |||
|
105 | NSVerticalRuler) | |||
|
106 | self.verticalRulerView = r | |||
|
107 | self.verticalRulerView.setClientView_(self.textView) | |||
|
108 | self._start_cli_banner() | |||
|
109 | ||||
|
110 | ||||
|
111 | def appWillTerminate_(self, notification): | |||
|
112 | """appWillTerminate""" | |||
|
113 | ||||
|
114 | self.engine.stopService() | |||
|
115 | ||||
|
116 | ||||
|
117 | def complete(self, token): | |||
|
118 | """Complete token in engine's user_ns | |||
|
119 | ||||
|
120 | Parameters | |||
|
121 | ---------- | |||
|
122 | token : string | |||
|
123 | ||||
|
124 | Result | |||
|
125 | ------ | |||
|
126 | Deferred result of | |||
|
127 | IPython.kernel.engineservice.IEngineBase.complete | |||
|
128 | """ | |||
|
129 | ||||
|
130 | return self.engine.complete(token) | |||
|
131 | ||||
|
132 | ||||
|
133 | def execute(self, block, blockID=None): | |||
|
134 | self.waitingForEngine = True | |||
|
135 | self.willChangeValueForKey_('commandHistory') | |||
|
136 | d = super(IPythonCocoaController, self).execute(block, blockID) | |||
|
137 | d.addBoth(self._engine_done) | |||
|
138 | d.addCallback(self._update_user_ns) | |||
|
139 | ||||
|
140 | return d | |||
|
141 | ||||
|
142 | ||||
|
143 | def _engine_done(self, x): | |||
|
144 | self.waitingForEngine = False | |||
|
145 | self.didChangeValueForKey_('commandHistory') | |||
|
146 | return x | |||
|
147 | ||||
|
148 | def _update_user_ns(self, result): | |||
|
149 | """Update self.userNS from self.engine's namespace""" | |||
|
150 | d = self.engine.keys() | |||
|
151 | d.addCallback(self._get_engine_namespace_values_for_keys) | |||
|
152 | ||||
|
153 | return result | |||
|
154 | ||||
|
155 | ||||
|
156 | def _get_engine_namespace_values_for_keys(self, keys): | |||
|
157 | d = self.engine.pull(keys) | |||
|
158 | d.addCallback(self._store_engine_namespace_values, keys=keys) | |||
|
159 | ||||
|
160 | ||||
|
161 | def _store_engine_namespace_values(self, values, keys=[]): | |||
|
162 | assert(len(values) == len(keys)) | |||
|
163 | self.willChangeValueForKey_('userNS') | |||
|
164 | for (k,v) in zip(keys,values): | |||
|
165 | self.userNS[k] = saferepr(v) | |||
|
166 | self.didChangeValueForKey_('userNS') | |||
|
167 | ||||
|
168 | ||||
|
169 | def update_cell_prompt(self, result): | |||
|
170 | if(isinstance(result, Failure)): | |||
|
171 | blockID = result.blockID | |||
|
172 | else: | |||
|
173 | blockID = result['blockID'] | |||
|
174 | ||||
|
175 | ||||
|
176 | self.insert_text(self.input_prompt(result=result), | |||
|
177 | textRange=NSMakeRange(self.blockRanges[blockID].location,0), | |||
|
178 | scrollToVisible=False | |||
|
179 | ) | |||
|
180 | ||||
|
181 | return result | |||
|
182 | ||||
|
183 | ||||
|
184 | def render_result(self, result): | |||
|
185 | blockID = result['blockID'] | |||
|
186 | inputRange = self.blockRanges[blockID] | |||
|
187 | del self.blockRanges[blockID] | |||
|
188 | ||||
|
189 | #print inputRange,self.current_block_range() | |||
|
190 | self.insert_text('\n' + | |||
|
191 | self.output_prompt(result) + | |||
|
192 | result.get('display',{}).get('pprint','') + | |||
|
193 | '\n\n', | |||
|
194 | textRange=NSMakeRange(inputRange.location+inputRange.length, | |||
|
195 | 0)) | |||
|
196 | return result | |||
|
197 | ||||
|
198 | ||||
|
199 | def render_error(self, failure): | |||
|
200 | self.insert_text('\n\n'+str(failure)+'\n\n') | |||
|
201 | self.start_new_block() | |||
|
202 | return failure | |||
|
203 | ||||
|
204 | ||||
|
205 | def _start_cli_banner(self): | |||
|
206 | """Print banner""" | |||
|
207 | ||||
|
208 | banner = """IPython1 %s -- An enhanced Interactive Python.""" % \ | |||
|
209 | IPython.__version__ | |||
|
210 | ||||
|
211 | self.insert_text(banner + '\n\n') | |||
|
212 | ||||
|
213 | ||||
|
214 | def start_new_block(self): | |||
|
215 | """""" | |||
|
216 | ||||
|
217 | self.currentBlockID = self.next_block_ID() | |||
|
218 | ||||
|
219 | ||||
|
220 | ||||
|
221 | def next_block_ID(self): | |||
|
222 | ||||
|
223 | return uuid.uuid4() | |||
|
224 | ||||
|
225 | def current_block_range(self): | |||
|
226 | return self.blockRanges.get(self.currentBlockID, | |||
|
227 | NSMakeRange(self.textView.textStorage().length(), | |||
|
228 | 0)) | |||
|
229 | ||||
|
230 | def current_block(self): | |||
|
231 | """The current block's text""" | |||
|
232 | ||||
|
233 | return self.text_for_range(self.current_block_range()) | |||
|
234 | ||||
|
235 | def text_for_range(self, textRange): | |||
|
236 | """text_for_range""" | |||
|
237 | ||||
|
238 | ts = self.textView.textStorage() | |||
|
239 | return ts.string().substringWithRange_(textRange) | |||
|
240 | ||||
|
241 | def current_line(self): | |||
|
242 | block = self.text_for_range(self.current_block_range()) | |||
|
243 | block = block.split('\n') | |||
|
244 | return block[-1] | |||
|
245 | ||||
|
246 | ||||
|
247 | def insert_text(self, string=None, textRange=None, scrollToVisible=True): | |||
|
248 | """Insert text into textView at textRange, updating blockRanges | |||
|
249 | as necessary | |||
|
250 | """ | |||
|
251 | ||||
|
252 | if(textRange == None): | |||
|
253 | #range for end of text | |||
|
254 | textRange = NSMakeRange(self.textView.textStorage().length(), 0) | |||
|
255 | ||||
|
256 | for r in self.blockRanges.itervalues(): | |||
|
257 | intersection = NSIntersectionRange(r,textRange) | |||
|
258 | if(intersection.length == 0): #ranges don't intersect | |||
|
259 | if r.location >= textRange.location: | |||
|
260 | r.location += len(string) | |||
|
261 | else: #ranges intersect | |||
|
262 | if(r.location <= textRange.location): | |||
|
263 | assert(intersection.length == textRange.length) | |||
|
264 | r.length += textRange.length | |||
|
265 | else: | |||
|
266 | r.location += intersection.length | |||
|
267 | ||||
|
268 | self.textView.replaceCharactersInRange_withString_( | |||
|
269 | textRange, string) | |||
|
270 | self.textView.setSelectedRange_( | |||
|
271 | NSMakeRange(textRange.location+len(string), 0)) | |||
|
272 | if(scrollToVisible): | |||
|
273 | self.textView.scrollRangeToVisible_(textRange) | |||
|
274 | ||||
|
275 | ||||
|
276 | ||||
|
277 | ||||
|
278 | def replace_current_block_with_string(self, textView, string): | |||
|
279 | textView.replaceCharactersInRange_withString_( | |||
|
280 | self.current_block_range(), | |||
|
281 | string) | |||
|
282 | self.current_block_range().length = len(string) | |||
|
283 | r = NSMakeRange(textView.textStorage().length(), 0) | |||
|
284 | textView.scrollRangeToVisible_(r) | |||
|
285 | textView.setSelectedRange_(r) | |||
|
286 | ||||
|
287 | ||||
|
288 | def current_indent_string(self): | |||
|
289 | """returns string for indent or None if no indent""" | |||
|
290 | ||||
|
291 | if(len(self.current_block()) > 0): | |||
|
292 | lines = self.current_block().split('\n') | |||
|
293 | currentIndent = len(lines[-1]) - len(lines[-1]) | |||
|
294 | if(currentIndent == 0): | |||
|
295 | currentIndent = self.tabSpaces | |||
|
296 | ||||
|
297 | if(self.tabUsesSpaces): | |||
|
298 | result = ' ' * currentIndent | |||
|
299 | else: | |||
|
300 | result = '\t' * (currentIndent/self.tabSpaces) | |||
|
301 | else: | |||
|
302 | result = None | |||
|
303 | ||||
|
304 | return result | |||
|
305 | ||||
|
306 | ||||
|
307 | # NSTextView delegate methods... | |||
|
308 | def textView_doCommandBySelector_(self, textView, selector): | |||
|
309 | assert(textView == self.textView) | |||
|
310 | NSLog("textView_doCommandBySelector_: "+selector) | |||
|
311 | ||||
|
312 | ||||
|
313 | if(selector == 'insertNewline:'): | |||
|
314 | indent = self.current_indent_string() | |||
|
315 | if(indent): | |||
|
316 | line = indent + self.current_line() | |||
|
317 | else: | |||
|
318 | line = self.current_line() | |||
|
319 | ||||
|
320 | if(self.is_complete(self.current_block())): | |||
|
321 | self.execute(self.current_block(), | |||
|
322 | blockID=self.currentBlockID) | |||
|
323 | self.start_new_block() | |||
|
324 | ||||
|
325 | return True | |||
|
326 | ||||
|
327 | return False | |||
|
328 | ||||
|
329 | elif(selector == 'moveUp:'): | |||
|
330 | prevBlock = self.get_history_previous(self.current_block()) | |||
|
331 | if(prevBlock != None): | |||
|
332 | self.replace_current_block_with_string(textView, prevBlock) | |||
|
333 | else: | |||
|
334 | NSBeep() | |||
|
335 | return True | |||
|
336 | ||||
|
337 | elif(selector == 'moveDown:'): | |||
|
338 | nextBlock = self.get_history_next() | |||
|
339 | if(nextBlock != None): | |||
|
340 | self.replace_current_block_with_string(textView, nextBlock) | |||
|
341 | else: | |||
|
342 | NSBeep() | |||
|
343 | return True | |||
|
344 | ||||
|
345 | elif(selector == 'moveToBeginningOfParagraph:'): | |||
|
346 | textView.setSelectedRange_(NSMakeRange( | |||
|
347 | self.current_block_range().location, | |||
|
348 | 0)) | |||
|
349 | return True | |||
|
350 | elif(selector == 'moveToEndOfParagraph:'): | |||
|
351 | textView.setSelectedRange_(NSMakeRange( | |||
|
352 | self.current_block_range().location + \ | |||
|
353 | self.current_block_range().length, 0)) | |||
|
354 | return True | |||
|
355 | elif(selector == 'deleteToEndOfParagraph:'): | |||
|
356 | if(textView.selectedRange().location <= \ | |||
|
357 | self.current_block_range().location): | |||
|
358 | # Intersect the selected range with the current line range | |||
|
359 | if(self.current_block_range().length < 0): | |||
|
360 | self.blockRanges[self.currentBlockID].length = 0 | |||
|
361 | ||||
|
362 | r = NSIntersectionRange(textView.rangesForUserTextChange()[0], | |||
|
363 | self.current_block_range()) | |||
|
364 | ||||
|
365 | if(r.length > 0): #no intersection | |||
|
366 | textView.setSelectedRange_(r) | |||
|
367 | ||||
|
368 | return False # don't actually handle the delete | |||
|
369 | ||||
|
370 | elif(selector == 'insertTab:'): | |||
|
371 | if(len(self.current_line().strip()) == 0): #only white space | |||
|
372 | return False | |||
|
373 | else: | |||
|
374 | self.textView.complete_(self) | |||
|
375 | return True | |||
|
376 | ||||
|
377 | elif(selector == 'deleteBackward:'): | |||
|
378 | #if we're at the beginning of the current block, ignore | |||
|
379 | if(textView.selectedRange().location == \ | |||
|
380 | self.current_block_range().location): | |||
|
381 | return True | |||
|
382 | else: | |||
|
383 | self.current_block_range().length-=1 | |||
|
384 | return False | |||
|
385 | return False | |||
|
386 | ||||
|
387 | ||||
|
388 | def textView_shouldChangeTextInRanges_replacementStrings_(self, | |||
|
389 | textView, ranges, replacementStrings): | |||
|
390 | """ | |||
|
391 | Delegate method for NSTextView. | |||
|
392 | ||||
|
393 | Refuse change text in ranges not at end, but make those changes at | |||
|
394 | end. | |||
|
395 | """ | |||
|
396 | ||||
|
397 | assert(len(ranges) == len(replacementStrings)) | |||
|
398 | allow = True | |||
|
399 | for r,s in zip(ranges, replacementStrings): | |||
|
400 | r = r.rangeValue() | |||
|
401 | if(textView.textStorage().length() > 0 and | |||
|
402 | r.location < self.current_block_range().location): | |||
|
403 | self.insert_text(s) | |||
|
404 | allow = False | |||
|
405 | ||||
|
406 | ||||
|
407 | self.blockRanges.setdefault(self.currentBlockID, | |||
|
408 | self.current_block_range()).length +=\ | |||
|
409 | len(s) | |||
|
410 | ||||
|
411 | return allow | |||
|
412 | ||||
|
413 | def textView_completions_forPartialWordRange_indexOfSelectedItem_(self, | |||
|
414 | textView, words, charRange, index): | |||
|
415 | try: | |||
|
416 | ts = textView.textStorage() | |||
|
417 | token = ts.string().substringWithRange_(charRange) | |||
|
418 | completions = blockingCallFromThread(self.complete, token) | |||
|
419 | except: | |||
|
420 | completions = objc.nil | |||
|
421 | NSBeep() | |||
|
422 | ||||
|
423 | return (completions,0) | |||
|
424 | ||||
|
425 |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
This diff has been collapsed as it changes many lines, (3423 lines changed) Show them Hide them | |||||
@@ -0,0 +1,3423 b'' | |||||
|
1 | <?xml version="1.0" encoding="UTF-8"?> | |||
|
2 | <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.01"> | |||
|
3 | <data> | |||
|
4 | <int key="IBDocument.SystemTarget">1050</int> | |||
|
5 | <string key="IBDocument.SystemVersion">9D34</string> | |||
|
6 | <string key="IBDocument.InterfaceBuilderVersion">629</string> | |||
|
7 | <string key="IBDocument.AppKitVersion">949.33</string> | |||
|
8 | <string key="IBDocument.HIToolboxVersion">352.00</string> | |||
|
9 | <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> | |||
|
10 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
11 | <integer value="416"/> | |||
|
12 | <integer value="29"/> | |||
|
13 | </object> | |||
|
14 | <object class="NSArray" key="IBDocument.PluginDependencies"> | |||
|
15 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
16 | <string id="885801228">com.apple.InterfaceBuilderKit</string> | |||
|
17 | <string id="113577022">com.apple.InterfaceBuilder.CocoaPlugin</string> | |||
|
18 | </object> | |||
|
19 | <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048"> | |||
|
20 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
21 | <object class="NSCustomObject" id="1021"> | |||
|
22 | <string key="NSClassName" id="190635311">NSApplication</string> | |||
|
23 | </object> | |||
|
24 | <object class="NSCustomObject" id="1014"> | |||
|
25 | <string key="NSClassName">FirstResponder</string> | |||
|
26 | </object> | |||
|
27 | <object class="NSCustomObject" id="1050"> | |||
|
28 | <reference key="NSClassName" ref="190635311"/> | |||
|
29 | </object> | |||
|
30 | <object class="NSMenu" id="649796088"> | |||
|
31 | <string key="NSTitle">AMainMenu</string> | |||
|
32 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
33 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
34 | <object class="NSMenuItem" id="694149608"> | |||
|
35 | <reference key="NSMenu" ref="649796088"/> | |||
|
36 | <string key="NSTitle" id="837240250">IPython1Sandbox</string> | |||
|
37 | <string key="NSKeyEquiv" id="255189770"/> | |||
|
38 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
39 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
40 | <object class="NSCustomResource" key="NSOnImage" id="985281305"> | |||
|
41 | <string key="NSClassName" id="60114142">NSImage</string> | |||
|
42 | <string key="NSResourceName">NSMenuCheckmark</string> | |||
|
43 | </object> | |||
|
44 | <object class="NSCustomResource" key="NSMixedImage" id="351279908"> | |||
|
45 | <reference key="NSClassName" ref="60114142"/> | |||
|
46 | <string key="NSResourceName">NSMenuMixedState</string> | |||
|
47 | </object> | |||
|
48 | <string key="NSAction">submenuAction:</string> | |||
|
49 | <object class="NSMenu" key="NSSubmenu" id="110575045"> | |||
|
50 | <reference key="NSTitle" ref="837240250"/> | |||
|
51 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
52 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
53 | <object class="NSMenuItem" id="238522557"> | |||
|
54 | <reference key="NSMenu" ref="110575045"/> | |||
|
55 | <string key="NSTitle">About IPython1Sandbox</string> | |||
|
56 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
57 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
58 | <reference key="NSOnImage" ref="985281305"/> | |||
|
59 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
60 | </object> | |||
|
61 | <object class="NSMenuItem" id="304266470"> | |||
|
62 | <reference key="NSMenu" ref="110575045"/> | |||
|
63 | <bool key="NSIsDisabled">YES</bool> | |||
|
64 | <bool key="NSIsSeparator">YES</bool> | |||
|
65 | <reference key="NSTitle" ref="255189770"/> | |||
|
66 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
67 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
68 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
69 | <reference key="NSOnImage" ref="985281305"/> | |||
|
70 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
71 | </object> | |||
|
72 | <object class="NSMenuItem" id="609285721"> | |||
|
73 | <reference key="NSMenu" ref="110575045"/> | |||
|
74 | <string type="base64-UTF8" key="NSTitle">UHJlZmVyZW5jZXPigKY</string> | |||
|
75 | <string key="NSKeyEquiv">,</string> | |||
|
76 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
77 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
78 | <reference key="NSOnImage" ref="985281305"/> | |||
|
79 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
80 | </object> | |||
|
81 | <object class="NSMenuItem" id="481834944"> | |||
|
82 | <reference key="NSMenu" ref="110575045"/> | |||
|
83 | <bool key="NSIsDisabled">YES</bool> | |||
|
84 | <bool key="NSIsSeparator">YES</bool> | |||
|
85 | <reference key="NSTitle" ref="255189770"/> | |||
|
86 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
87 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
88 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
89 | <reference key="NSOnImage" ref="985281305"/> | |||
|
90 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
91 | </object> | |||
|
92 | <object class="NSMenuItem" id="1046388886"> | |||
|
93 | <reference key="NSMenu" ref="110575045"/> | |||
|
94 | <string key="NSTitle" id="642338826">Services</string> | |||
|
95 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
96 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
97 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
98 | <reference key="NSOnImage" ref="985281305"/> | |||
|
99 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
100 | <string key="NSAction">submenuAction:</string> | |||
|
101 | <object class="NSMenu" key="NSSubmenu" id="752062318"> | |||
|
102 | <reference key="NSTitle" ref="642338826"/> | |||
|
103 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
104 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
105 | </object> | |||
|
106 | <string key="NSName">_NSServicesMenu</string> | |||
|
107 | </object> | |||
|
108 | </object> | |||
|
109 | <object class="NSMenuItem" id="646227648"> | |||
|
110 | <reference key="NSMenu" ref="110575045"/> | |||
|
111 | <bool key="NSIsDisabled">YES</bool> | |||
|
112 | <bool key="NSIsSeparator">YES</bool> | |||
|
113 | <reference key="NSTitle" ref="255189770"/> | |||
|
114 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
115 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
116 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
117 | <reference key="NSOnImage" ref="985281305"/> | |||
|
118 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
119 | </object> | |||
|
120 | <object class="NSMenuItem" id="755159360"> | |||
|
121 | <reference key="NSMenu" ref="110575045"/> | |||
|
122 | <string key="NSTitle">Hide IPython1Sandbox</string> | |||
|
123 | <string key="NSKeyEquiv" id="940330891">h</string> | |||
|
124 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
125 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
126 | <reference key="NSOnImage" ref="985281305"/> | |||
|
127 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
128 | </object> | |||
|
129 | <object class="NSMenuItem" id="342932134"> | |||
|
130 | <reference key="NSMenu" ref="110575045"/> | |||
|
131 | <string key="NSTitle">Hide Others</string> | |||
|
132 | <reference key="NSKeyEquiv" ref="940330891"/> | |||
|
133 | <int key="NSKeyEquivModMask">1572864</int> | |||
|
134 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
135 | <reference key="NSOnImage" ref="985281305"/> | |||
|
136 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
137 | </object> | |||
|
138 | <object class="NSMenuItem" id="908899353"> | |||
|
139 | <reference key="NSMenu" ref="110575045"/> | |||
|
140 | <string key="NSTitle">Show All</string> | |||
|
141 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
142 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
143 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
144 | <reference key="NSOnImage" ref="985281305"/> | |||
|
145 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
146 | </object> | |||
|
147 | <object class="NSMenuItem" id="1056857174"> | |||
|
148 | <reference key="NSMenu" ref="110575045"/> | |||
|
149 | <bool key="NSIsDisabled">YES</bool> | |||
|
150 | <bool key="NSIsSeparator">YES</bool> | |||
|
151 | <reference key="NSTitle" ref="255189770"/> | |||
|
152 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
153 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
154 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
155 | <reference key="NSOnImage" ref="985281305"/> | |||
|
156 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
157 | </object> | |||
|
158 | <object class="NSMenuItem" id="632727374"> | |||
|
159 | <reference key="NSMenu" ref="110575045"/> | |||
|
160 | <string key="NSTitle">Quit IPython1Sandbox</string> | |||
|
161 | <string key="NSKeyEquiv">q</string> | |||
|
162 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
163 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
164 | <reference key="NSOnImage" ref="985281305"/> | |||
|
165 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
166 | </object> | |||
|
167 | </object> | |||
|
168 | <string key="NSName">_NSAppleMenu</string> | |||
|
169 | </object> | |||
|
170 | </object> | |||
|
171 | <object class="NSMenuItem" id="379814623"> | |||
|
172 | <reference key="NSMenu" ref="649796088"/> | |||
|
173 | <string key="NSTitle" id="881404960">File</string> | |||
|
174 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
175 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
176 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
177 | <reference key="NSOnImage" ref="985281305"/> | |||
|
178 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
179 | <string key="NSAction">submenuAction:</string> | |||
|
180 | <object class="NSMenu" key="NSSubmenu" id="720053764"> | |||
|
181 | <reference key="NSTitle" ref="881404960"/> | |||
|
182 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
183 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
184 | <object class="NSMenuItem" id="705341025"> | |||
|
185 | <reference key="NSMenu" ref="720053764"/> | |||
|
186 | <string key="NSTitle">New</string> | |||
|
187 | <string key="NSKeyEquiv">n</string> | |||
|
188 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
189 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
190 | <reference key="NSOnImage" ref="985281305"/> | |||
|
191 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
192 | </object> | |||
|
193 | <object class="NSMenuItem" id="722745758"> | |||
|
194 | <reference key="NSMenu" ref="720053764"/> | |||
|
195 | <string type="base64-UTF8" key="NSTitle">T3BlbuKApg</string> | |||
|
196 | <string key="NSKeyEquiv">o</string> | |||
|
197 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
198 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
199 | <reference key="NSOnImage" ref="985281305"/> | |||
|
200 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
201 | </object> | |||
|
202 | <object class="NSMenuItem" id="1025936716"> | |||
|
203 | <reference key="NSMenu" ref="720053764"/> | |||
|
204 | <string key="NSTitle" id="975517829">Open Recent</string> | |||
|
205 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
206 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
207 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
208 | <reference key="NSOnImage" ref="985281305"/> | |||
|
209 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
210 | <string key="NSAction">submenuAction:</string> | |||
|
211 | <object class="NSMenu" key="NSSubmenu" id="1065607017"> | |||
|
212 | <reference key="NSTitle" ref="975517829"/> | |||
|
213 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
214 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
215 | <object class="NSMenuItem" id="759406840"> | |||
|
216 | <reference key="NSMenu" ref="1065607017"/> | |||
|
217 | <string key="NSTitle">Clear Menu</string> | |||
|
218 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
219 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
220 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
221 | <reference key="NSOnImage" ref="985281305"/> | |||
|
222 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
223 | </object> | |||
|
224 | </object> | |||
|
225 | <string key="NSName">_NSRecentDocumentsMenu</string> | |||
|
226 | </object> | |||
|
227 | </object> | |||
|
228 | <object class="NSMenuItem" id="425164168"> | |||
|
229 | <reference key="NSMenu" ref="720053764"/> | |||
|
230 | <bool key="NSIsDisabled">YES</bool> | |||
|
231 | <bool key="NSIsSeparator">YES</bool> | |||
|
232 | <reference key="NSTitle" ref="255189770"/> | |||
|
233 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
234 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
235 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
236 | <reference key="NSOnImage" ref="985281305"/> | |||
|
237 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
238 | </object> | |||
|
239 | <object class="NSMenuItem" id="776162233"> | |||
|
240 | <reference key="NSMenu" ref="720053764"/> | |||
|
241 | <string key="NSTitle">Close</string> | |||
|
242 | <string key="NSKeyEquiv">w</string> | |||
|
243 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
244 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
245 | <reference key="NSOnImage" ref="985281305"/> | |||
|
246 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
247 | </object> | |||
|
248 | <object class="NSMenuItem" id="1023925487"> | |||
|
249 | <reference key="NSMenu" ref="720053764"/> | |||
|
250 | <string key="NSTitle">Save</string> | |||
|
251 | <string key="NSKeyEquiv">s</string> | |||
|
252 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
253 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
254 | <reference key="NSOnImage" ref="985281305"/> | |||
|
255 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
256 | </object> | |||
|
257 | <object class="NSMenuItem" id="117038363"> | |||
|
258 | <reference key="NSMenu" ref="720053764"/> | |||
|
259 | <string type="base64-UTF8" key="NSTitle">U2F2ZSBBc+KApg</string> | |||
|
260 | <string key="NSKeyEquiv">S</string> | |||
|
261 | <int key="NSKeyEquivModMask">1179648</int> | |||
|
262 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
263 | <reference key="NSOnImage" ref="985281305"/> | |||
|
264 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
265 | </object> | |||
|
266 | <object class="NSMenuItem" id="579971712"> | |||
|
267 | <reference key="NSMenu" ref="720053764"/> | |||
|
268 | <string key="NSTitle">Revert to Saved</string> | |||
|
269 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
270 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
271 | <reference key="NSOnImage" ref="985281305"/> | |||
|
272 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
273 | </object> | |||
|
274 | <object class="NSMenuItem" id="1010469920"> | |||
|
275 | <reference key="NSMenu" ref="720053764"/> | |||
|
276 | <bool key="NSIsDisabled">YES</bool> | |||
|
277 | <bool key="NSIsSeparator">YES</bool> | |||
|
278 | <reference key="NSTitle" ref="255189770"/> | |||
|
279 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
280 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
281 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
282 | <reference key="NSOnImage" ref="985281305"/> | |||
|
283 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
284 | </object> | |||
|
285 | <object class="NSMenuItem" id="294629803"> | |||
|
286 | <reference key="NSMenu" ref="720053764"/> | |||
|
287 | <string key="NSTitle">Page Setup...</string> | |||
|
288 | <string key="NSKeyEquiv">P</string> | |||
|
289 | <int key="NSKeyEquivModMask">1179648</int> | |||
|
290 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
291 | <reference key="NSOnImage" ref="985281305"/> | |||
|
292 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
293 | <reference key="NSToolTip" ref="255189770"/> | |||
|
294 | </object> | |||
|
295 | <object class="NSMenuItem" id="49223823"> | |||
|
296 | <reference key="NSMenu" ref="720053764"/> | |||
|
297 | <string type="base64-UTF8" key="NSTitle">UHJpbnTigKY</string> | |||
|
298 | <string key="NSKeyEquiv">p</string> | |||
|
299 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
300 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
301 | <reference key="NSOnImage" ref="985281305"/> | |||
|
302 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
303 | </object> | |||
|
304 | </object> | |||
|
305 | </object> | |||
|
306 | </object> | |||
|
307 | <object class="NSMenuItem" id="952259628"> | |||
|
308 | <reference key="NSMenu" ref="649796088"/> | |||
|
309 | <string key="NSTitle" id="1037326483">Edit</string> | |||
|
310 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
311 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
312 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
313 | <reference key="NSOnImage" ref="985281305"/> | |||
|
314 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
315 | <string key="NSAction">submenuAction:</string> | |||
|
316 | <object class="NSMenu" key="NSSubmenu" id="789758025"> | |||
|
317 | <reference key="NSTitle" ref="1037326483"/> | |||
|
318 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
319 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
320 | <object class="NSMenuItem" id="1058277027"> | |||
|
321 | <reference key="NSMenu" ref="789758025"/> | |||
|
322 | <string key="NSTitle">Undo</string> | |||
|
323 | <string key="NSKeyEquiv">z</string> | |||
|
324 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
325 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
326 | <reference key="NSOnImage" ref="985281305"/> | |||
|
327 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
328 | </object> | |||
|
329 | <object class="NSMenuItem" id="790794224"> | |||
|
330 | <reference key="NSMenu" ref="789758025"/> | |||
|
331 | <string key="NSTitle">Redo</string> | |||
|
332 | <string key="NSKeyEquiv">Z</string> | |||
|
333 | <int key="NSKeyEquivModMask">1179648</int> | |||
|
334 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
335 | <reference key="NSOnImage" ref="985281305"/> | |||
|
336 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
337 | </object> | |||
|
338 | <object class="NSMenuItem" id="1040322652"> | |||
|
339 | <reference key="NSMenu" ref="789758025"/> | |||
|
340 | <bool key="NSIsDisabled">YES</bool> | |||
|
341 | <bool key="NSIsSeparator">YES</bool> | |||
|
342 | <reference key="NSTitle" ref="255189770"/> | |||
|
343 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
344 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
345 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
346 | <reference key="NSOnImage" ref="985281305"/> | |||
|
347 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
348 | </object> | |||
|
349 | <object class="NSMenuItem" id="296257095"> | |||
|
350 | <reference key="NSMenu" ref="789758025"/> | |||
|
351 | <string key="NSTitle">Cut</string> | |||
|
352 | <string key="NSKeyEquiv">x</string> | |||
|
353 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
354 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
355 | <reference key="NSOnImage" ref="985281305"/> | |||
|
356 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
357 | </object> | |||
|
358 | <object class="NSMenuItem" id="860595796"> | |||
|
359 | <reference key="NSMenu" ref="789758025"/> | |||
|
360 | <string key="NSTitle">Copy</string> | |||
|
361 | <string key="NSKeyEquiv">c</string> | |||
|
362 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
363 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
364 | <reference key="NSOnImage" ref="985281305"/> | |||
|
365 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
366 | </object> | |||
|
367 | <object class="NSMenuItem" id="29853731"> | |||
|
368 | <reference key="NSMenu" ref="789758025"/> | |||
|
369 | <string key="NSTitle">Paste</string> | |||
|
370 | <string key="NSKeyEquiv">v</string> | |||
|
371 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
372 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
373 | <reference key="NSOnImage" ref="985281305"/> | |||
|
374 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
375 | </object> | |||
|
376 | <object class="NSMenuItem" id="437104165"> | |||
|
377 | <reference key="NSMenu" ref="789758025"/> | |||
|
378 | <string key="NSTitle">Delete</string> | |||
|
379 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
380 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
381 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
382 | <reference key="NSOnImage" ref="985281305"/> | |||
|
383 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
384 | </object> | |||
|
385 | <object class="NSMenuItem" id="583158037"> | |||
|
386 | <reference key="NSMenu" ref="789758025"/> | |||
|
387 | <string key="NSTitle">Select All</string> | |||
|
388 | <string key="NSKeyEquiv">a</string> | |||
|
389 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
390 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
391 | <reference key="NSOnImage" ref="985281305"/> | |||
|
392 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
393 | </object> | |||
|
394 | <object class="NSMenuItem" id="212016141"> | |||
|
395 | <reference key="NSMenu" ref="789758025"/> | |||
|
396 | <bool key="NSIsDisabled">YES</bool> | |||
|
397 | <bool key="NSIsSeparator">YES</bool> | |||
|
398 | <reference key="NSTitle" ref="255189770"/> | |||
|
399 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
400 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
401 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
402 | <reference key="NSOnImage" ref="985281305"/> | |||
|
403 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
404 | </object> | |||
|
405 | <object class="NSMenuItem" id="892235320"> | |||
|
406 | <reference key="NSMenu" ref="789758025"/> | |||
|
407 | <string key="NSTitle" id="688083180">Find</string> | |||
|
408 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
409 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
410 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
411 | <reference key="NSOnImage" ref="985281305"/> | |||
|
412 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
413 | <string key="NSAction">submenuAction:</string> | |||
|
414 | <object class="NSMenu" key="NSSubmenu" id="963351320"> | |||
|
415 | <reference key="NSTitle" ref="688083180"/> | |||
|
416 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
417 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
418 | <object class="NSMenuItem" id="447796847"> | |||
|
419 | <reference key="NSMenu" ref="963351320"/> | |||
|
420 | <string type="base64-UTF8" key="NSTitle">RmluZOKApg</string> | |||
|
421 | <string key="NSKeyEquiv" id="469505129">f</string> | |||
|
422 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
423 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
424 | <reference key="NSOnImage" ref="985281305"/> | |||
|
425 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
426 | <int key="NSTag">1</int> | |||
|
427 | </object> | |||
|
428 | <object class="NSMenuItem" id="326711663"> | |||
|
429 | <reference key="NSMenu" ref="963351320"/> | |||
|
430 | <string key="NSTitle">Find Next</string> | |||
|
431 | <string key="NSKeyEquiv" id="762398675">g</string> | |||
|
432 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
433 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
434 | <reference key="NSOnImage" ref="985281305"/> | |||
|
435 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
436 | <int key="NSTag">2</int> | |||
|
437 | </object> | |||
|
438 | <object class="NSMenuItem" id="270902937"> | |||
|
439 | <reference key="NSMenu" ref="963351320"/> | |||
|
440 | <string key="NSTitle">Find Previous</string> | |||
|
441 | <string key="NSKeyEquiv" id="819654342">G</string> | |||
|
442 | <int key="NSKeyEquivModMask">1179648</int> | |||
|
443 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
444 | <reference key="NSOnImage" ref="985281305"/> | |||
|
445 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
446 | <int key="NSTag">3</int> | |||
|
447 | </object> | |||
|
448 | <object class="NSMenuItem" id="159080638"> | |||
|
449 | <reference key="NSMenu" ref="963351320"/> | |||
|
450 | <string key="NSTitle">Use Selection for Find</string> | |||
|
451 | <string key="NSKeyEquiv">e</string> | |||
|
452 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
453 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
454 | <reference key="NSOnImage" ref="985281305"/> | |||
|
455 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
456 | <int key="NSTag">7</int> | |||
|
457 | </object> | |||
|
458 | <object class="NSMenuItem" id="88285865"> | |||
|
459 | <reference key="NSMenu" ref="963351320"/> | |||
|
460 | <string key="NSTitle">Jump to Selection</string> | |||
|
461 | <string key="NSKeyEquiv">j</string> | |||
|
462 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
463 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
464 | <reference key="NSOnImage" ref="985281305"/> | |||
|
465 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
466 | </object> | |||
|
467 | </object> | |||
|
468 | </object> | |||
|
469 | </object> | |||
|
470 | <object class="NSMenuItem" id="972420730"> | |||
|
471 | <reference key="NSMenu" ref="789758025"/> | |||
|
472 | <string key="NSTitle" id="739167250">Spelling and Grammar</string> | |||
|
473 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
474 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
475 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
476 | <reference key="NSOnImage" ref="985281305"/> | |||
|
477 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
478 | <string key="NSAction">submenuAction:</string> | |||
|
479 | <object class="NSMenu" key="NSSubmenu" id="769623530"> | |||
|
480 | <reference key="NSTitle" ref="739167250"/> | |||
|
481 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
482 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
483 | <object class="NSMenuItem" id="679648819"> | |||
|
484 | <reference key="NSMenu" ref="769623530"/> | |||
|
485 | <string type="base64-UTF8" key="NSTitle">U2hvdyBTcGVsbGluZ+KApg</string> | |||
|
486 | <string key="NSKeyEquiv">:</string> | |||
|
487 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
488 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
489 | <reference key="NSOnImage" ref="985281305"/> | |||
|
490 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
491 | </object> | |||
|
492 | <object class="NSMenuItem" id="96193923"> | |||
|
493 | <reference key="NSMenu" ref="769623530"/> | |||
|
494 | <string key="NSTitle">Check Spelling</string> | |||
|
495 | <string key="NSKeyEquiv">;</string> | |||
|
496 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
497 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
498 | <reference key="NSOnImage" ref="985281305"/> | |||
|
499 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
500 | </object> | |||
|
501 | <object class="NSMenuItem" id="948374510"> | |||
|
502 | <reference key="NSMenu" ref="769623530"/> | |||
|
503 | <string key="NSTitle">Check Spelling While Typing</string> | |||
|
504 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
505 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
506 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
507 | <reference key="NSOnImage" ref="985281305"/> | |||
|
508 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
509 | </object> | |||
|
510 | <object class="NSMenuItem" id="967646866"> | |||
|
511 | <reference key="NSMenu" ref="769623530"/> | |||
|
512 | <string key="NSTitle">Check Grammar With Spelling</string> | |||
|
513 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
514 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
515 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
516 | <reference key="NSOnImage" ref="985281305"/> | |||
|
517 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
518 | </object> | |||
|
519 | </object> | |||
|
520 | </object> | |||
|
521 | </object> | |||
|
522 | <object class="NSMenuItem" id="507821607"> | |||
|
523 | <reference key="NSMenu" ref="789758025"/> | |||
|
524 | <string key="NSTitle" id="904739598">Substitutions</string> | |||
|
525 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
526 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
527 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
528 | <reference key="NSOnImage" ref="985281305"/> | |||
|
529 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
530 | <string key="NSAction">submenuAction:</string> | |||
|
531 | <object class="NSMenu" key="NSSubmenu" id="698887838"> | |||
|
532 | <reference key="NSTitle" ref="904739598"/> | |||
|
533 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
534 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
535 | <object class="NSMenuItem" id="605118523"> | |||
|
536 | <reference key="NSMenu" ref="698887838"/> | |||
|
537 | <string key="NSTitle">Smart Copy/Paste</string> | |||
|
538 | <reference key="NSKeyEquiv" ref="469505129"/> | |||
|
539 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
540 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
541 | <reference key="NSOnImage" ref="985281305"/> | |||
|
542 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
543 | <int key="NSTag">1</int> | |||
|
544 | </object> | |||
|
545 | <object class="NSMenuItem" id="197661976"> | |||
|
546 | <reference key="NSMenu" ref="698887838"/> | |||
|
547 | <string key="NSTitle">Smart Quotes</string> | |||
|
548 | <reference key="NSKeyEquiv" ref="762398675"/> | |||
|
549 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
550 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
551 | <reference key="NSOnImage" ref="985281305"/> | |||
|
552 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
553 | <int key="NSTag">2</int> | |||
|
554 | </object> | |||
|
555 | <object class="NSMenuItem" id="708854459"> | |||
|
556 | <reference key="NSMenu" ref="698887838"/> | |||
|
557 | <string key="NSTitle">Smart Links</string> | |||
|
558 | <reference key="NSKeyEquiv" ref="819654342"/> | |||
|
559 | <int key="NSKeyEquivModMask">1179648</int> | |||
|
560 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
561 | <reference key="NSOnImage" ref="985281305"/> | |||
|
562 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
563 | <int key="NSTag">3</int> | |||
|
564 | </object> | |||
|
565 | </object> | |||
|
566 | </object> | |||
|
567 | </object> | |||
|
568 | <object class="NSMenuItem" id="676164635"> | |||
|
569 | <reference key="NSMenu" ref="789758025"/> | |||
|
570 | <string key="NSTitle" id="812002426">Speech</string> | |||
|
571 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
572 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
573 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
574 | <reference key="NSOnImage" ref="985281305"/> | |||
|
575 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
576 | <string key="NSAction">submenuAction:</string> | |||
|
577 | <object class="NSMenu" key="NSSubmenu" id="785027613"> | |||
|
578 | <reference key="NSTitle" ref="812002426"/> | |||
|
579 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
580 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
581 | <object class="NSMenuItem" id="731782645"> | |||
|
582 | <reference key="NSMenu" ref="785027613"/> | |||
|
583 | <string key="NSTitle">Start Speaking</string> | |||
|
584 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
585 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
586 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
587 | <reference key="NSOnImage" ref="985281305"/> | |||
|
588 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
589 | </object> | |||
|
590 | <object class="NSMenuItem" id="680220178"> | |||
|
591 | <reference key="NSMenu" ref="785027613"/> | |||
|
592 | <string key="NSTitle">Stop Speaking</string> | |||
|
593 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
594 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
595 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
596 | <reference key="NSOnImage" ref="985281305"/> | |||
|
597 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
598 | </object> | |||
|
599 | </object> | |||
|
600 | </object> | |||
|
601 | </object> | |||
|
602 | </object> | |||
|
603 | </object> | |||
|
604 | </object> | |||
|
605 | <object class="NSMenuItem" id="626404410"> | |||
|
606 | <reference key="NSMenu" ref="649796088"/> | |||
|
607 | <string key="NSTitle" id="241242548">Format</string> | |||
|
608 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
609 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
610 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
611 | <reference key="NSOnImage" ref="985281305"/> | |||
|
612 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
613 | <string key="NSAction">submenuAction:</string> | |||
|
614 | <object class="NSMenu" key="NSSubmenu" id="502084290"> | |||
|
615 | <reference key="NSTitle" ref="241242548"/> | |||
|
616 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
617 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
618 | <object class="NSMenuItem" id="519768076"> | |||
|
619 | <reference key="NSMenu" ref="502084290"/> | |||
|
620 | <string key="NSTitle">Show Fonts</string> | |||
|
621 | <string key="NSKeyEquiv" id="806579634">t</string> | |||
|
622 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
623 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
624 | <reference key="NSOnImage" ref="985281305"/> | |||
|
625 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
626 | </object> | |||
|
627 | <object class="NSMenuItem" id="1028416764"> | |||
|
628 | <reference key="NSMenu" ref="502084290"/> | |||
|
629 | <string key="NSTitle">Show Colors</string> | |||
|
630 | <string key="NSKeyEquiv">C</string> | |||
|
631 | <int key="NSKeyEquivModMask">1179648</int> | |||
|
632 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
633 | <reference key="NSOnImage" ref="985281305"/> | |||
|
634 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
635 | </object> | |||
|
636 | </object> | |||
|
637 | </object> | |||
|
638 | </object> | |||
|
639 | <object class="NSMenuItem" id="586577488"> | |||
|
640 | <reference key="NSMenu" ref="649796088"/> | |||
|
641 | <string key="NSTitle" id="809723865">View</string> | |||
|
642 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
643 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
644 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
645 | <reference key="NSOnImage" ref="985281305"/> | |||
|
646 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
647 | <string key="NSAction">submenuAction:</string> | |||
|
648 | <object class="NSMenu" key="NSSubmenu" id="466310130"> | |||
|
649 | <reference key="NSTitle" ref="809723865"/> | |||
|
650 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
651 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
652 | <object class="NSMenuItem" id="102151532"> | |||
|
653 | <reference key="NSMenu" ref="466310130"/> | |||
|
654 | <string key="NSTitle">Show Toolbar</string> | |||
|
655 | <reference key="NSKeyEquiv" ref="806579634"/> | |||
|
656 | <int key="NSKeyEquivModMask">1572864</int> | |||
|
657 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
658 | <reference key="NSOnImage" ref="985281305"/> | |||
|
659 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
660 | </object> | |||
|
661 | <object class="NSMenuItem" id="237841660"> | |||
|
662 | <reference key="NSMenu" ref="466310130"/> | |||
|
663 | <string type="base64-UTF8" key="NSTitle">Q3VzdG9taXplIFRvb2xiYXLigKY</string> | |||
|
664 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
665 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
666 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
667 | <reference key="NSOnImage" ref="985281305"/> | |||
|
668 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
669 | </object> | |||
|
670 | </object> | |||
|
671 | </object> | |||
|
672 | </object> | |||
|
673 | <object class="NSMenuItem" id="713487014"> | |||
|
674 | <reference key="NSMenu" ref="649796088"/> | |||
|
675 | <string key="NSTitle" id="64165424">Window</string> | |||
|
676 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
677 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
678 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
679 | <reference key="NSOnImage" ref="985281305"/> | |||
|
680 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
681 | <string key="NSAction">submenuAction:</string> | |||
|
682 | <object class="NSMenu" key="NSSubmenu" id="835318025"> | |||
|
683 | <reference key="NSTitle" ref="64165424"/> | |||
|
684 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
685 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
686 | <object class="NSMenuItem" id="1011231497"> | |||
|
687 | <reference key="NSMenu" ref="835318025"/> | |||
|
688 | <string key="NSTitle">Minimize</string> | |||
|
689 | <string key="NSKeyEquiv">m</string> | |||
|
690 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
691 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
692 | <reference key="NSOnImage" ref="985281305"/> | |||
|
693 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
694 | </object> | |||
|
695 | <object class="NSMenuItem" id="575023229"> | |||
|
696 | <reference key="NSMenu" ref="835318025"/> | |||
|
697 | <string key="NSTitle">Zoom</string> | |||
|
698 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
699 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
700 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
701 | <reference key="NSOnImage" ref="985281305"/> | |||
|
702 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
703 | </object> | |||
|
704 | <object class="NSMenuItem" id="299356726"> | |||
|
705 | <reference key="NSMenu" ref="835318025"/> | |||
|
706 | <bool key="NSIsDisabled">YES</bool> | |||
|
707 | <bool key="NSIsSeparator">YES</bool> | |||
|
708 | <reference key="NSTitle" ref="255189770"/> | |||
|
709 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
710 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
711 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
712 | <reference key="NSOnImage" ref="985281305"/> | |||
|
713 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
714 | </object> | |||
|
715 | <object class="NSMenuItem" id="625202149"> | |||
|
716 | <reference key="NSMenu" ref="835318025"/> | |||
|
717 | <string key="NSTitle">Bring All to Front</string> | |||
|
718 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
719 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
720 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
721 | <reference key="NSOnImage" ref="985281305"/> | |||
|
722 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
723 | </object> | |||
|
724 | </object> | |||
|
725 | <string key="NSName">_NSWindowsMenu</string> | |||
|
726 | </object> | |||
|
727 | </object> | |||
|
728 | <object class="NSMenuItem" id="391199113"> | |||
|
729 | <reference key="NSMenu" ref="649796088"/> | |||
|
730 | <string key="NSTitle" id="461919786">Help</string> | |||
|
731 | <reference key="NSKeyEquiv" ref="255189770"/> | |||
|
732 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
733 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
734 | <reference key="NSOnImage" ref="985281305"/> | |||
|
735 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
736 | <string key="NSAction">submenuAction:</string> | |||
|
737 | <object class="NSMenu" key="NSSubmenu" id="374024848"> | |||
|
738 | <reference key="NSTitle" ref="461919786"/> | |||
|
739 | <object class="NSMutableArray" key="NSMenuItems"> | |||
|
740 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
741 | <object class="NSMenuItem" id="238773614"> | |||
|
742 | <reference key="NSMenu" ref="374024848"/> | |||
|
743 | <string key="NSTitle">IPython1Sandbox Help</string> | |||
|
744 | <string key="NSKeyEquiv">?</string> | |||
|
745 | <int key="NSKeyEquivModMask">1048576</int> | |||
|
746 | <int key="NSMnemonicLoc">2147483647</int> | |||
|
747 | <reference key="NSOnImage" ref="985281305"/> | |||
|
748 | <reference key="NSMixedImage" ref="351279908"/> | |||
|
749 | </object> | |||
|
750 | </object> | |||
|
751 | </object> | |||
|
752 | </object> | |||
|
753 | </object> | |||
|
754 | <string key="NSName">_NSMainMenu</string> | |||
|
755 | </object> | |||
|
756 | <object class="NSWindowTemplate" id="972006081"> | |||
|
757 | <int key="NSWindowStyleMask">15</int> | |||
|
758 | <int key="NSWindowBacking">2</int> | |||
|
759 | <string key="NSWindowRect">{{335, 413}, {725, 337}}</string> | |||
|
760 | <int key="NSWTFlags">1946157056</int> | |||
|
761 | <string key="NSWindowTitle">IPython1 (Cocoa)</string> | |||
|
762 | <string key="NSWindowClass">NSWindow</string> | |||
|
763 | <nil key="NSViewClass"/> | |||
|
764 | <object class="NSView" key="NSWindowView" id="439893737"> | |||
|
765 | <reference key="NSNextResponder"/> | |||
|
766 | <int key="NSvFlags">256</int> | |||
|
767 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
768 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
769 | <object class="NSSplitView" id="741760375"> | |||
|
770 | <reference key="NSNextResponder" ref="439893737"/> | |||
|
771 | <int key="NSvFlags">274</int> | |||
|
772 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
773 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
774 | <object class="NSBox" id="554641139"> | |||
|
775 | <reference key="NSNextResponder" ref="741760375"/> | |||
|
776 | <int key="NSvFlags">22</int> | |||
|
777 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
778 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
779 | <object class="NSView" id="597872307"> | |||
|
780 | <reference key="NSNextResponder" ref="554641139"/> | |||
|
781 | <int key="NSvFlags">256</int> | |||
|
782 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
783 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
784 | <object class="NSScrollView" id="188193463"> | |||
|
785 | <reference key="NSNextResponder" ref="597872307"/> | |||
|
786 | <int key="NSvFlags">274</int> | |||
|
787 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
788 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
789 | <object class="NSClipView" id="638544389"> | |||
|
790 | <reference key="NSNextResponder" ref="188193463"/> | |||
|
791 | <int key="NSvFlags">2304</int> | |||
|
792 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
793 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
794 | <object class="NSTextView" id="163417131"> | |||
|
795 | <reference key="NSNextResponder" ref="638544389"/> | |||
|
796 | <int key="NSvFlags">2322</int> | |||
|
797 | <object class="NSMutableSet" key="NSDragTypes"> | |||
|
798 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
799 | <object class="NSMutableArray" key="set.sortedObjects"> | |||
|
800 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
801 | <string>Apple HTML pasteboard type</string> | |||
|
802 | <string>Apple PDF pasteboard type</string> | |||
|
803 | <string>Apple PICT pasteboard type</string> | |||
|
804 | <string>Apple PNG pasteboard type</string> | |||
|
805 | <string>Apple URL pasteboard type</string> | |||
|
806 | <string>CorePasteboardFlavorType 0x6D6F6F76</string> | |||
|
807 | <string>CorePasteboardFlavorType 0x75726C20</string> | |||
|
808 | <string>NSColor pasteboard type</string> | |||
|
809 | <string>NSFilenamesPboardType</string> | |||
|
810 | <string>NSStringPboardType</string> | |||
|
811 | <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string> | |||
|
812 | <string>NeXT RTFD pasteboard type</string> | |||
|
813 | <string>NeXT Rich Text Format v1.0 pasteboard type</string> | |||
|
814 | <string>NeXT TIFF v4.0 pasteboard type</string> | |||
|
815 | <string>NeXT font pasteboard type</string> | |||
|
816 | <string>NeXT ruler pasteboard type</string> | |||
|
817 | <string>WebURLsWithTitlesPboardType</string> | |||
|
818 | </object> | |||
|
819 | </object> | |||
|
820 | <string key="NSFrame">{{0, 38}, {433, 14}}</string> | |||
|
821 | <reference key="NSSuperview" ref="638544389"/> | |||
|
822 | <reference key="NSWindow"/> | |||
|
823 | <object class="NSTextContainer" key="NSTextContainer" id="662117317"> | |||
|
824 | <object class="NSLayoutManager" key="NSLayoutManager"> | |||
|
825 | <object class="NSTextStorage" key="NSTextStorage"> | |||
|
826 | <object class="NSMutableString" key="NSString"> | |||
|
827 | <characters key="NS.bytes"/> | |||
|
828 | </object> | |||
|
829 | <nil key="NSDelegate"/> | |||
|
830 | </object> | |||
|
831 | <object class="NSMutableArray" key="NSTextContainers"> | |||
|
832 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
833 | <reference ref="662117317"/> | |||
|
834 | </object> | |||
|
835 | <int key="NSLMFlags">6</int> | |||
|
836 | <nil key="NSDelegate"/> | |||
|
837 | </object> | |||
|
838 | <reference key="NSTextView" ref="163417131"/> | |||
|
839 | <double key="NSWidth">4.330000e+02</double> | |||
|
840 | <int key="NSTCFlags">1</int> | |||
|
841 | </object> | |||
|
842 | <object class="NSTextViewSharedData" key="NSSharedData"> | |||
|
843 | <int key="NSFlags">346991</int> | |||
|
844 | <object class="NSColor" key="NSBackgroundColor"> | |||
|
845 | <int key="NSColorSpace">2</int> | |||
|
846 | <bytes key="NSRGB">MSAwLjk1Mjk0MTI0IDAuODUwOTgwNDYAA</bytes> | |||
|
847 | </object> | |||
|
848 | <object class="NSColor" key="NSInsertionColor" id="555789289"> | |||
|
849 | <int key="NSColorSpace">3</int> | |||
|
850 | <bytes key="NSWhite">MAA</bytes> | |||
|
851 | </object> | |||
|
852 | <object class="NSDictionary" key="NSSelectedAttributes"> | |||
|
853 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
854 | <object class="NSMutableArray" key="dict.sortedKeys"> | |||
|
855 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
856 | <string>NSBackgroundColor</string> | |||
|
857 | <string id="19777717">NSColor</string> | |||
|
858 | </object> | |||
|
859 | <object class="NSMutableArray" key="dict.values"> | |||
|
860 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
861 | <object class="NSColor"> | |||
|
862 | <int key="NSColorSpace">6</int> | |||
|
863 | <string key="NSCatalogName" id="945274157">System</string> | |||
|
864 | <string key="NSColorName">selectedTextBackgroundColor</string> | |||
|
865 | <object class="NSColor" key="NSColor" id="377165725"> | |||
|
866 | <int key="NSColorSpace">3</int> | |||
|
867 | <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> | |||
|
868 | </object> | |||
|
869 | </object> | |||
|
870 | <object class="NSColor"> | |||
|
871 | <int key="NSColorSpace">6</int> | |||
|
872 | <reference key="NSCatalogName" ref="945274157"/> | |||
|
873 | <string key="NSColorName">selectedTextColor</string> | |||
|
874 | <reference key="NSColor" ref="555789289"/> | |||
|
875 | </object> | |||
|
876 | </object> | |||
|
877 | </object> | |||
|
878 | <nil key="NSMarkedAttributes"/> | |||
|
879 | <object class="NSDictionary" key="NSLinkAttributes"> | |||
|
880 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
881 | <object class="NSMutableArray" key="dict.sortedKeys"> | |||
|
882 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
883 | <reference ref="19777717"/> | |||
|
884 | <string>NSUnderline</string> | |||
|
885 | </object> | |||
|
886 | <object class="NSMutableArray" key="dict.values"> | |||
|
887 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
888 | <object class="NSColor"> | |||
|
889 | <int key="NSColorSpace">1</int> | |||
|
890 | <bytes key="NSRGB">MCAwIDEAA</bytes> | |||
|
891 | </object> | |||
|
892 | <integer value="1" id="9"/> | |||
|
893 | </object> | |||
|
894 | </object> | |||
|
895 | <nil key="NSDefaultParagraphStyle"/> | |||
|
896 | </object> | |||
|
897 | <int key="NSTVFlags">6</int> | |||
|
898 | <string key="NSMaxSize">{480, 1e+07}</string> | |||
|
899 | <string key="NSMinize">{84, 0}</string> | |||
|
900 | <nil key="NSDelegate"/> | |||
|
901 | </object> | |||
|
902 | </object> | |||
|
903 | <string key="NSFrame">{{1, 1}, {433, 231}}</string> | |||
|
904 | <string key="NSBounds">{{0, 38}, {433, 231}}</string> | |||
|
905 | <reference key="NSSuperview" ref="188193463"/> | |||
|
906 | <reference key="NSWindow"/> | |||
|
907 | <reference key="NSNextKeyView" ref="163417131"/> | |||
|
908 | <reference key="NSDocView" ref="163417131"/> | |||
|
909 | <object class="NSColor" key="NSBGColor" id="521347521"> | |||
|
910 | <int key="NSColorSpace">3</int> | |||
|
911 | <bytes key="NSWhite">MQA</bytes> | |||
|
912 | </object> | |||
|
913 | <object class="NSCursor" key="NSCursor"> | |||
|
914 | <string key="NSHotSpot">{4, -5}</string> | |||
|
915 | <int key="NSCursorType">1</int> | |||
|
916 | </object> | |||
|
917 | <int key="NScvFlags">4</int> | |||
|
918 | </object> | |||
|
919 | <object class="NSScroller" id="418410897"> | |||
|
920 | <reference key="NSNextResponder" ref="188193463"/> | |||
|
921 | <int key="NSvFlags">-2147483392</int> | |||
|
922 | <string key="NSFrame">{{427, 1}, {15, 263}}</string> | |||
|
923 | <reference key="NSSuperview" ref="188193463"/> | |||
|
924 | <reference key="NSWindow"/> | |||
|
925 | <reference key="NSTarget" ref="188193463"/> | |||
|
926 | <string key="NSAction" id="688920982">_doScroller:</string> | |||
|
927 | <double key="NSPercent">3.389175e-01</double> | |||
|
928 | </object> | |||
|
929 | <object class="NSScroller" id="936733673"> | |||
|
930 | <reference key="NSNextResponder" ref="188193463"/> | |||
|
931 | <int key="NSvFlags">256</int> | |||
|
932 | <string key="NSFrame">{{-100, -100}, {87, 18}}</string> | |||
|
933 | <reference key="NSSuperview" ref="188193463"/> | |||
|
934 | <reference key="NSWindow"/> | |||
|
935 | <int key="NSsFlags">1</int> | |||
|
936 | <reference key="NSTarget" ref="188193463"/> | |||
|
937 | <reference key="NSAction" ref="688920982"/> | |||
|
938 | <double key="NSCurValue">1.000000e+00</double> | |||
|
939 | <double key="NSPercent">9.456522e-01</double> | |||
|
940 | </object> | |||
|
941 | </object> | |||
|
942 | <string key="NSFrame">{{18, 14}, {435, 233}}</string> | |||
|
943 | <reference key="NSSuperview" ref="597872307"/> | |||
|
944 | <reference key="NSWindow"/> | |||
|
945 | <reference key="NSNextKeyView" ref="638544389"/> | |||
|
946 | <int key="NSsFlags">530</int> | |||
|
947 | <reference key="NSVScroller" ref="418410897"/> | |||
|
948 | <reference key="NSHScroller" ref="936733673"/> | |||
|
949 | <reference key="NSContentView" ref="638544389"/> | |||
|
950 | </object> | |||
|
951 | </object> | |||
|
952 | <string key="NSFrame">{{1, 1}, {471, 257}}</string> | |||
|
953 | <reference key="NSSuperview" ref="554641139"/> | |||
|
954 | <reference key="NSWindow"/> | |||
|
955 | </object> | |||
|
956 | </object> | |||
|
957 | <string key="NSFrameSize">{473, 273}</string> | |||
|
958 | <reference key="NSSuperview" ref="741760375"/> | |||
|
959 | <reference key="NSWindow"/> | |||
|
960 | <string key="NSOffsets" id="1055927954">{0, 0}</string> | |||
|
961 | <object class="NSTextFieldCell" key="NSTitleCell"> | |||
|
962 | <int key="NSCellFlags">67239424</int> | |||
|
963 | <int key="NSCellFlags2">0</int> | |||
|
964 | <string key="NSContents">Console</string> | |||
|
965 | <object class="NSFont" key="NSSupport" id="26"> | |||
|
966 | <string key="NSName" id="257617473">LucidaGrande</string> | |||
|
967 | <double key="NSSize">1.100000e+01</double> | |||
|
968 | <int key="NSfFlags">3100</int> | |||
|
969 | </object> | |||
|
970 | <object class="NSColor" key="NSBackgroundColor" id="131515055"> | |||
|
971 | <int key="NSColorSpace">6</int> | |||
|
972 | <reference key="NSCatalogName" ref="945274157"/> | |||
|
973 | <string key="NSColorName">textBackgroundColor</string> | |||
|
974 | <reference key="NSColor" ref="521347521"/> | |||
|
975 | </object> | |||
|
976 | <object class="NSColor" key="NSTextColor"> | |||
|
977 | <int key="NSColorSpace">3</int> | |||
|
978 | <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> | |||
|
979 | </object> | |||
|
980 | </object> | |||
|
981 | <reference key="NSContentView" ref="597872307"/> | |||
|
982 | <int key="NSBorderType">1</int> | |||
|
983 | <int key="NSBoxType">0</int> | |||
|
984 | <int key="NSTitlePosition">2</int> | |||
|
985 | <bool key="NSTransparent">NO</bool> | |||
|
986 | </object> | |||
|
987 | <object class="NSBox" id="764100755"> | |||
|
988 | <reference key="NSNextResponder" ref="741760375"/> | |||
|
989 | <int key="NSvFlags">51</int> | |||
|
990 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
991 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
992 | <object class="NSView" id="581281551"> | |||
|
993 | <reference key="NSNextResponder" ref="764100755"/> | |||
|
994 | <int key="NSvFlags">256</int> | |||
|
995 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
996 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
997 | <object class="NSScrollView" id="516244966"> | |||
|
998 | <reference key="NSNextResponder" ref="581281551"/> | |||
|
999 | <int key="NSvFlags">274</int> | |||
|
1000 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
1001 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1002 | <object class="NSClipView" id="119083427"> | |||
|
1003 | <reference key="NSNextResponder" ref="516244966"/> | |||
|
1004 | <int key="NSvFlags">2304</int> | |||
|
1005 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
1006 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1007 | <object class="NSTableView" id="23853726"> | |||
|
1008 | <reference key="NSNextResponder" ref="119083427"/> | |||
|
1009 | <int key="NSvFlags">256</int> | |||
|
1010 | <string key="NSFrameSize">{156, 200}</string> | |||
|
1011 | <reference key="NSSuperview" ref="119083427"/> | |||
|
1012 | <reference key="NSWindow"/> | |||
|
1013 | <bool key="NSEnabled">YES</bool> | |||
|
1014 | <object class="NSTableHeaderView" key="NSHeaderView" id="1048357090"> | |||
|
1015 | <reference key="NSNextResponder" ref="746968320"/> | |||
|
1016 | <int key="NSvFlags">256</int> | |||
|
1017 | <string key="NSFrameSize">{156, 17}</string> | |||
|
1018 | <reference key="NSSuperview" ref="746968320"/> | |||
|
1019 | <reference key="NSWindow"/> | |||
|
1020 | <reference key="NSTableView" ref="23853726"/> | |||
|
1021 | </object> | |||
|
1022 | <object class="_NSCornerView" key="NSCornerView" id="212282722"> | |||
|
1023 | <reference key="NSNextResponder" ref="516244966"/> | |||
|
1024 | <int key="NSvFlags">256</int> | |||
|
1025 | <string key="NSFrame">{{157, 0}, {16, 17}}</string> | |||
|
1026 | <reference key="NSSuperview" ref="516244966"/> | |||
|
1027 | <reference key="NSWindow"/> | |||
|
1028 | </object> | |||
|
1029 | <object class="NSMutableArray" key="NSTableColumns"> | |||
|
1030 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1031 | <object class="NSTableColumn" id="920426212"> | |||
|
1032 | <double key="NSWidth">7.100000e+01</double> | |||
|
1033 | <double key="NSMinWidth">4.000000e+01</double> | |||
|
1034 | <double key="NSMaxWidth">1.000000e+03</double> | |||
|
1035 | <object class="NSTableHeaderCell" key="NSHeaderCell"> | |||
|
1036 | <int key="NSCellFlags">75628032</int> | |||
|
1037 | <int key="NSCellFlags2">0</int> | |||
|
1038 | <string key="NSContents">Variable</string> | |||
|
1039 | <reference key="NSSupport" ref="26"/> | |||
|
1040 | <object class="NSColor" key="NSBackgroundColor" id="890615311"> | |||
|
1041 | <int key="NSColorSpace">3</int> | |||
|
1042 | <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes> | |||
|
1043 | </object> | |||
|
1044 | <object class="NSColor" key="NSTextColor" id="866628999"> | |||
|
1045 | <int key="NSColorSpace">6</int> | |||
|
1046 | <reference key="NSCatalogName" ref="945274157"/> | |||
|
1047 | <string key="NSColorName">headerTextColor</string> | |||
|
1048 | <reference key="NSColor" ref="555789289"/> | |||
|
1049 | </object> | |||
|
1050 | </object> | |||
|
1051 | <object class="NSTextFieldCell" key="NSDataCell" id="525071236"> | |||
|
1052 | <int key="NSCellFlags">337772096</int> | |||
|
1053 | <int key="NSCellFlags2">2048</int> | |||
|
1054 | <string key="NSContents" id="590184478">Text Cell</string> | |||
|
1055 | <object class="NSFont" key="NSSupport" id="8196371"> | |||
|
1056 | <reference key="NSName" ref="257617473"/> | |||
|
1057 | <double key="NSSize">1.300000e+01</double> | |||
|
1058 | <int key="NSfFlags">1044</int> | |||
|
1059 | </object> | |||
|
1060 | <reference key="NSControlView" ref="23853726"/> | |||
|
1061 | <object class="NSColor" key="NSBackgroundColor" id="224028609"> | |||
|
1062 | <int key="NSColorSpace">6</int> | |||
|
1063 | <reference key="NSCatalogName" ref="945274157"/> | |||
|
1064 | <string key="NSColorName">controlBackgroundColor</string> | |||
|
1065 | <reference key="NSColor" ref="377165725"/> | |||
|
1066 | </object> | |||
|
1067 | <object class="NSColor" key="NSTextColor" id="205104690"> | |||
|
1068 | <int key="NSColorSpace">6</int> | |||
|
1069 | <reference key="NSCatalogName" ref="945274157"/> | |||
|
1070 | <string key="NSColorName">controlTextColor</string> | |||
|
1071 | <reference key="NSColor" ref="555789289"/> | |||
|
1072 | </object> | |||
|
1073 | </object> | |||
|
1074 | <int key="NSResizingMask">3</int> | |||
|
1075 | <bool key="NSIsResizeable">YES</bool> | |||
|
1076 | <bool key="NSIsEditable">YES</bool> | |||
|
1077 | <reference key="NSTableView" ref="23853726"/> | |||
|
1078 | </object> | |||
|
1079 | <object class="NSTableColumn" id="857054683"> | |||
|
1080 | <double key="NSWidth">7.900000e+01</double> | |||
|
1081 | <double key="NSMinWidth">4.000000e+01</double> | |||
|
1082 | <double key="NSMaxWidth">1.000000e+03</double> | |||
|
1083 | <object class="NSTableHeaderCell" key="NSHeaderCell"> | |||
|
1084 | <int key="NSCellFlags">75628032</int> | |||
|
1085 | <int key="NSCellFlags2">0</int> | |||
|
1086 | <string key="NSContents">Value</string> | |||
|
1087 | <reference key="NSSupport" ref="26"/> | |||
|
1088 | <reference key="NSBackgroundColor" ref="890615311"/> | |||
|
1089 | <reference key="NSTextColor" ref="866628999"/> | |||
|
1090 | </object> | |||
|
1091 | <object class="NSTextFieldCell" key="NSDataCell" id="377147224"> | |||
|
1092 | <int key="NSCellFlags">337772096</int> | |||
|
1093 | <int key="NSCellFlags2">2048</int> | |||
|
1094 | <reference key="NSContents" ref="590184478"/> | |||
|
1095 | <reference key="NSSupport" ref="8196371"/> | |||
|
1096 | <reference key="NSControlView" ref="23853726"/> | |||
|
1097 | <reference key="NSBackgroundColor" ref="224028609"/> | |||
|
1098 | <reference key="NSTextColor" ref="205104690"/> | |||
|
1099 | </object> | |||
|
1100 | <int key="NSResizingMask">3</int> | |||
|
1101 | <bool key="NSIsResizeable">YES</bool> | |||
|
1102 | <bool key="NSIsEditable">YES</bool> | |||
|
1103 | <reference key="NSTableView" ref="23853726"/> | |||
|
1104 | </object> | |||
|
1105 | </object> | |||
|
1106 | <double key="NSIntercellSpacingWidth">3.000000e+00</double> | |||
|
1107 | <double key="NSIntercellSpacingHeight">2.000000e+00</double> | |||
|
1108 | <reference key="NSBackgroundColor" ref="521347521"/> | |||
|
1109 | <object class="NSColor" key="NSGridColor"> | |||
|
1110 | <int key="NSColorSpace">6</int> | |||
|
1111 | <reference key="NSCatalogName" ref="945274157"/> | |||
|
1112 | <string key="NSColorName">gridColor</string> | |||
|
1113 | <object class="NSColor" key="NSColor"> | |||
|
1114 | <int key="NSColorSpace">3</int> | |||
|
1115 | <bytes key="NSWhite">MC41AA</bytes> | |||
|
1116 | </object> | |||
|
1117 | </object> | |||
|
1118 | <double key="NSRowHeight">1.700000e+01</double> | |||
|
1119 | <int key="NSTvFlags">-692060160</int> | |||
|
1120 | <int key="NSGridStyleMask">1</int> | |||
|
1121 | <int key="NSColumnAutoresizingStyle">4</int> | |||
|
1122 | <int key="NSDraggingSourceMaskForLocal">15</int> | |||
|
1123 | <int key="NSDraggingSourceMaskForNonLocal">0</int> | |||
|
1124 | <bool key="NSAllowsTypeSelect">YES</bool> | |||
|
1125 | </object> | |||
|
1126 | </object> | |||
|
1127 | <string key="NSFrame">{{1, 17}, {156, 200}}</string> | |||
|
1128 | <reference key="NSSuperview" ref="516244966"/> | |||
|
1129 | <reference key="NSWindow"/> | |||
|
1130 | <reference key="NSNextKeyView" ref="23853726"/> | |||
|
1131 | <reference key="NSDocView" ref="23853726"/> | |||
|
1132 | <reference key="NSBGColor" ref="224028609"/> | |||
|
1133 | <int key="NScvFlags">4</int> | |||
|
1134 | </object> | |||
|
1135 | <object class="NSScroller" id="512953560"> | |||
|
1136 | <reference key="NSNextResponder" ref="516244966"/> | |||
|
1137 | <int key="NSvFlags">256</int> | |||
|
1138 | <string key="NSFrame">{{157, 17}, {15, 200}}</string> | |||
|
1139 | <reference key="NSSuperview" ref="516244966"/> | |||
|
1140 | <reference key="NSWindow"/> | |||
|
1141 | <reference key="NSTarget" ref="516244966"/> | |||
|
1142 | <reference key="NSAction" ref="688920982"/> | |||
|
1143 | <double key="NSPercent">9.961240e-01</double> | |||
|
1144 | </object> | |||
|
1145 | <object class="NSScroller" id="47103270"> | |||
|
1146 | <reference key="NSNextResponder" ref="516244966"/> | |||
|
1147 | <int key="NSvFlags">256</int> | |||
|
1148 | <string key="NSFrame">{{1, 217}, {156, 15}}</string> | |||
|
1149 | <reference key="NSSuperview" ref="516244966"/> | |||
|
1150 | <reference key="NSWindow"/> | |||
|
1151 | <int key="NSsFlags">1</int> | |||
|
1152 | <reference key="NSTarget" ref="516244966"/> | |||
|
1153 | <reference key="NSAction" ref="688920982"/> | |||
|
1154 | <double key="NSPercent">7.179487e-01</double> | |||
|
1155 | </object> | |||
|
1156 | <object class="NSClipView" id="746968320"> | |||
|
1157 | <reference key="NSNextResponder" ref="516244966"/> | |||
|
1158 | <int key="NSvFlags">2304</int> | |||
|
1159 | <object class="NSMutableArray" key="NSSubviews"> | |||
|
1160 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1161 | <reference ref="1048357090"/> | |||
|
1162 | </object> | |||
|
1163 | <string key="NSFrame">{{1, 0}, {156, 17}}</string> | |||
|
1164 | <reference key="NSSuperview" ref="516244966"/> | |||
|
1165 | <reference key="NSWindow"/> | |||
|
1166 | <reference key="NSNextKeyView" ref="1048357090"/> | |||
|
1167 | <reference key="NSDocView" ref="1048357090"/> | |||
|
1168 | <reference key="NSBGColor" ref="224028609"/> | |||
|
1169 | <int key="NScvFlags">4</int> | |||
|
1170 | </object> | |||
|
1171 | <reference ref="212282722"/> | |||
|
1172 | </object> | |||
|
1173 | <string key="NSFrame">{{18, 14}, {173, 233}}</string> | |||
|
1174 | <reference key="NSSuperview" ref="581281551"/> | |||
|
1175 | <reference key="NSWindow"/> | |||
|
1176 | <reference key="NSNextKeyView" ref="119083427"/> | |||
|
1177 | <int key="NSsFlags">50</int> | |||
|
1178 | <reference key="NSVScroller" ref="512953560"/> | |||
|
1179 | <reference key="NSHScroller" ref="47103270"/> | |||
|
1180 | <reference key="NSContentView" ref="119083427"/> | |||
|
1181 | <reference key="NSHeaderClipView" ref="746968320"/> | |||
|
1182 | <reference key="NSCornerView" ref="212282722"/> | |||
|
1183 | <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes> | |||
|
1184 | </object> | |||
|
1185 | </object> | |||
|
1186 | <string key="NSFrame">{{1, 1}, {209, 257}}</string> | |||
|
1187 | <reference key="NSSuperview" ref="764100755"/> | |||
|
1188 | <reference key="NSWindow"/> | |||
|
1189 | </object> | |||
|
1190 | </object> | |||
|
1191 | <string key="NSFrame">{{474, 0}, {211, 273}}</string> | |||
|
1192 | <reference key="NSSuperview" ref="741760375"/> | |||
|
1193 | <reference key="NSWindow"/> | |||
|
1194 | <reference key="NSOffsets" ref="1055927954"/> | |||
|
1195 | <object class="NSTextFieldCell" key="NSTitleCell"> | |||
|
1196 | <int key="NSCellFlags">67239424</int> | |||
|
1197 | <int key="NSCellFlags2">0</int> | |||
|
1198 | <string key="NSContents">Workspace</string> | |||
|
1199 | <reference key="NSSupport" ref="26"/> | |||
|
1200 | <reference key="NSBackgroundColor" ref="131515055"/> | |||
|
1201 | <object class="NSColor" key="NSTextColor"> | |||
|
1202 | <int key="NSColorSpace">3</int> | |||
|
1203 | <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> | |||
|
1204 | </object> | |||
|
1205 | </object> | |||
|
1206 | <reference key="NSContentView" ref="581281551"/> | |||
|
1207 | <int key="NSBorderType">1</int> | |||
|
1208 | <int key="NSBoxType">0</int> | |||
|
1209 | <int key="NSTitlePosition">2</int> | |||
|
1210 | <bool key="NSTransparent">NO</bool> | |||
|
1211 | </object> | |||
|
1212 | </object> | |||
|
1213 | <string key="NSFrame">{{20, 44}, {685, 273}}</string> | |||
|
1214 | <reference key="NSSuperview" ref="439893737"/> | |||
|
1215 | <reference key="NSWindow"/> | |||
|
1216 | <bool key="NSIsVertical">YES</bool> | |||
|
1217 | <int key="NSDividerStyle">2</int> | |||
|
1218 | <string key="NSAutosaveName">ipython1_console_workspace_split</string> | |||
|
1219 | </object> | |||
|
1220 | <object class="NSProgressIndicator" id="74807016"> | |||
|
1221 | <reference key="NSNextResponder" ref="439893737"/> | |||
|
1222 | <int key="NSvFlags">1313</int> | |||
|
1223 | <object class="NSPSMatrix" key="NSDrawMatrix"/> | |||
|
1224 | <string key="NSFrame">{{689, 20}, {16, 16}}</string> | |||
|
1225 | <reference key="NSSuperview" ref="439893737"/> | |||
|
1226 | <reference key="NSWindow"/> | |||
|
1227 | <int key="NSpiFlags">28938</int> | |||
|
1228 | <double key="NSMinValue">1.600000e+01</double> | |||
|
1229 | <double key="NSMaxValue">1.000000e+02</double> | |||
|
1230 | </object> | |||
|
1231 | </object> | |||
|
1232 | <string key="NSFrameSize">{725, 337}</string> | |||
|
1233 | <reference key="NSSuperview"/> | |||
|
1234 | <reference key="NSWindow"/> | |||
|
1235 | </object> | |||
|
1236 | <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string> | |||
|
1237 | <string key="NSFrameAutosaveName">ipython1_sandbox</string> | |||
|
1238 | </object> | |||
|
1239 | <object class="NSCustomObject" id="610635028"> | |||
|
1240 | <string key="NSClassName" id="982950837">IPython1SandboxAppDelegate</string> | |||
|
1241 | </object> | |||
|
1242 | <object class="NSDictionaryController" id="808393665"> | |||
|
1243 | <object class="NSMutableArray" key="NSDeclaredKeys"> | |||
|
1244 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1245 | <string>keys</string> | |||
|
1246 | <string id="181461860">key</string> | |||
|
1247 | <string id="276523235">value</string> | |||
|
1248 | </object> | |||
|
1249 | <bool key="NSEditable">YES</bool> | |||
|
1250 | <bool key="NSAvoidsEmptySelection">YES</bool> | |||
|
1251 | <bool key="NSPreservesSelection">YES</bool> | |||
|
1252 | <bool key="NSSelectsInsertedObjects">YES</bool> | |||
|
1253 | <bool key="NSFilterRestrictsInsertion">YES</bool> | |||
|
1254 | <object class="NSArray" key="NSSortDescriptors"> | |||
|
1255 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1256 | <object class="NSSortDescriptor"> | |||
|
1257 | <reference key="NSKey" ref="181461860"/> | |||
|
1258 | <bool key="NSAscending">YES</bool> | |||
|
1259 | <string key="NSSelector">compare:</string> | |||
|
1260 | </object> | |||
|
1261 | </object> | |||
|
1262 | <bool key="NSClearsFilterPredicateOnInsertion">YES</bool> | |||
|
1263 | <reference key="NSInitialKey" ref="181461860"/> | |||
|
1264 | <reference key="NSInitialValue" ref="276523235"/> | |||
|
1265 | </object> | |||
|
1266 | <object class="NSCustomObject" id="631572152"> | |||
|
1267 | <string key="NSClassName" id="695797635">IPythonCocoaController</string> | |||
|
1268 | </object> | |||
|
1269 | </object> | |||
|
1270 | <object class="IBObjectContainer" key="IBDocument.Objects"> | |||
|
1271 | <object class="NSMutableArray" key="connectionRecords"> | |||
|
1272 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1273 | <object class="IBConnectionRecord"> | |||
|
1274 | <object class="IBActionConnection" key="connection"> | |||
|
1275 | <string key="label">performMiniaturize:</string> | |||
|
1276 | <reference key="source" ref="1014"/> | |||
|
1277 | <reference key="destination" ref="1011231497"/> | |||
|
1278 | </object> | |||
|
1279 | <int key="connectionID">37</int> | |||
|
1280 | </object> | |||
|
1281 | <object class="IBConnectionRecord"> | |||
|
1282 | <object class="IBActionConnection" key="connection"> | |||
|
1283 | <string key="label">arrangeInFront:</string> | |||
|
1284 | <reference key="source" ref="1014"/> | |||
|
1285 | <reference key="destination" ref="625202149"/> | |||
|
1286 | </object> | |||
|
1287 | <int key="connectionID">39</int> | |||
|
1288 | </object> | |||
|
1289 | <object class="IBConnectionRecord"> | |||
|
1290 | <object class="IBActionConnection" key="connection"> | |||
|
1291 | <string key="label">print:</string> | |||
|
1292 | <reference key="source" ref="1014"/> | |||
|
1293 | <reference key="destination" ref="49223823"/> | |||
|
1294 | </object> | |||
|
1295 | <int key="connectionID">86</int> | |||
|
1296 | </object> | |||
|
1297 | <object class="IBConnectionRecord"> | |||
|
1298 | <object class="IBActionConnection" key="connection"> | |||
|
1299 | <string key="label">runPageLayout:</string> | |||
|
1300 | <reference key="source" ref="1014"/> | |||
|
1301 | <reference key="destination" ref="294629803"/> | |||
|
1302 | </object> | |||
|
1303 | <int key="connectionID">87</int> | |||
|
1304 | </object> | |||
|
1305 | <object class="IBConnectionRecord"> | |||
|
1306 | <object class="IBActionConnection" key="connection"> | |||
|
1307 | <string key="label">clearRecentDocuments:</string> | |||
|
1308 | <reference key="source" ref="1014"/> | |||
|
1309 | <reference key="destination" ref="759406840"/> | |||
|
1310 | </object> | |||
|
1311 | <int key="connectionID">127</int> | |||
|
1312 | </object> | |||
|
1313 | <object class="IBConnectionRecord"> | |||
|
1314 | <object class="IBActionConnection" key="connection"> | |||
|
1315 | <string key="label">orderFrontStandardAboutPanel:</string> | |||
|
1316 | <reference key="source" ref="1021"/> | |||
|
1317 | <reference key="destination" ref="238522557"/> | |||
|
1318 | </object> | |||
|
1319 | <int key="connectionID">142</int> | |||
|
1320 | </object> | |||
|
1321 | <object class="IBConnectionRecord"> | |||
|
1322 | <object class="IBActionConnection" key="connection"> | |||
|
1323 | <string key="label">performClose:</string> | |||
|
1324 | <reference key="source" ref="1014"/> | |||
|
1325 | <reference key="destination" ref="776162233"/> | |||
|
1326 | </object> | |||
|
1327 | <int key="connectionID">193</int> | |||
|
1328 | </object> | |||
|
1329 | <object class="IBConnectionRecord"> | |||
|
1330 | <object class="IBActionConnection" key="connection"> | |||
|
1331 | <string key="label">toggleContinuousSpellChecking:</string> | |||
|
1332 | <reference key="source" ref="1014"/> | |||
|
1333 | <reference key="destination" ref="948374510"/> | |||
|
1334 | </object> | |||
|
1335 | <int key="connectionID">222</int> | |||
|
1336 | </object> | |||
|
1337 | <object class="IBConnectionRecord"> | |||
|
1338 | <object class="IBActionConnection" key="connection"> | |||
|
1339 | <string key="label">undo:</string> | |||
|
1340 | <reference key="source" ref="1014"/> | |||
|
1341 | <reference key="destination" ref="1058277027"/> | |||
|
1342 | </object> | |||
|
1343 | <int key="connectionID">223</int> | |||
|
1344 | </object> | |||
|
1345 | <object class="IBConnectionRecord"> | |||
|
1346 | <object class="IBActionConnection" key="connection"> | |||
|
1347 | <string key="label">copy:</string> | |||
|
1348 | <reference key="source" ref="1014"/> | |||
|
1349 | <reference key="destination" ref="860595796"/> | |||
|
1350 | </object> | |||
|
1351 | <int key="connectionID">224</int> | |||
|
1352 | </object> | |||
|
1353 | <object class="IBConnectionRecord"> | |||
|
1354 | <object class="IBActionConnection" key="connection"> | |||
|
1355 | <string key="label">checkSpelling:</string> | |||
|
1356 | <reference key="source" ref="1014"/> | |||
|
1357 | <reference key="destination" ref="96193923"/> | |||
|
1358 | </object> | |||
|
1359 | <int key="connectionID">225</int> | |||
|
1360 | </object> | |||
|
1361 | <object class="IBConnectionRecord"> | |||
|
1362 | <object class="IBActionConnection" key="connection"> | |||
|
1363 | <string key="label">paste:</string> | |||
|
1364 | <reference key="source" ref="1014"/> | |||
|
1365 | <reference key="destination" ref="29853731"/> | |||
|
1366 | </object> | |||
|
1367 | <int key="connectionID">226</int> | |||
|
1368 | </object> | |||
|
1369 | <object class="IBConnectionRecord"> | |||
|
1370 | <object class="IBActionConnection" key="connection"> | |||
|
1371 | <string key="label">stopSpeaking:</string> | |||
|
1372 | <reference key="source" ref="1014"/> | |||
|
1373 | <reference key="destination" ref="680220178"/> | |||
|
1374 | </object> | |||
|
1375 | <int key="connectionID">227</int> | |||
|
1376 | </object> | |||
|
1377 | <object class="IBConnectionRecord"> | |||
|
1378 | <object class="IBActionConnection" key="connection"> | |||
|
1379 | <string key="label">cut:</string> | |||
|
1380 | <reference key="source" ref="1014"/> | |||
|
1381 | <reference key="destination" ref="296257095"/> | |||
|
1382 | </object> | |||
|
1383 | <int key="connectionID">228</int> | |||
|
1384 | </object> | |||
|
1385 | <object class="IBConnectionRecord"> | |||
|
1386 | <object class="IBActionConnection" key="connection"> | |||
|
1387 | <string key="label">showGuessPanel:</string> | |||
|
1388 | <reference key="source" ref="1014"/> | |||
|
1389 | <reference key="destination" ref="679648819"/> | |||
|
1390 | </object> | |||
|
1391 | <int key="connectionID">230</int> | |||
|
1392 | </object> | |||
|
1393 | <object class="IBConnectionRecord"> | |||
|
1394 | <object class="IBActionConnection" key="connection"> | |||
|
1395 | <string key="label">redo:</string> | |||
|
1396 | <reference key="source" ref="1014"/> | |||
|
1397 | <reference key="destination" ref="790794224"/> | |||
|
1398 | </object> | |||
|
1399 | <int key="connectionID">231</int> | |||
|
1400 | </object> | |||
|
1401 | <object class="IBConnectionRecord"> | |||
|
1402 | <object class="IBActionConnection" key="connection"> | |||
|
1403 | <string key="label">selectAll:</string> | |||
|
1404 | <reference key="source" ref="1014"/> | |||
|
1405 | <reference key="destination" ref="583158037"/> | |||
|
1406 | </object> | |||
|
1407 | <int key="connectionID">232</int> | |||
|
1408 | </object> | |||
|
1409 | <object class="IBConnectionRecord"> | |||
|
1410 | <object class="IBActionConnection" key="connection"> | |||
|
1411 | <string key="label">startSpeaking:</string> | |||
|
1412 | <reference key="source" ref="1014"/> | |||
|
1413 | <reference key="destination" ref="731782645"/> | |||
|
1414 | </object> | |||
|
1415 | <int key="connectionID">233</int> | |||
|
1416 | </object> | |||
|
1417 | <object class="IBConnectionRecord"> | |||
|
1418 | <object class="IBActionConnection" key="connection"> | |||
|
1419 | <string key="label">delete:</string> | |||
|
1420 | <reference key="source" ref="1014"/> | |||
|
1421 | <reference key="destination" ref="437104165"/> | |||
|
1422 | </object> | |||
|
1423 | <int key="connectionID">235</int> | |||
|
1424 | </object> | |||
|
1425 | <object class="IBConnectionRecord"> | |||
|
1426 | <object class="IBActionConnection" key="connection"> | |||
|
1427 | <string key="label">performZoom:</string> | |||
|
1428 | <reference key="source" ref="1014"/> | |||
|
1429 | <reference key="destination" ref="575023229"/> | |||
|
1430 | </object> | |||
|
1431 | <int key="connectionID">240</int> | |||
|
1432 | </object> | |||
|
1433 | <object class="IBConnectionRecord"> | |||
|
1434 | <object class="IBActionConnection" key="connection"> | |||
|
1435 | <string key="label">performFindPanelAction:</string> | |||
|
1436 | <reference key="source" ref="1014"/> | |||
|
1437 | <reference key="destination" ref="447796847"/> | |||
|
1438 | </object> | |||
|
1439 | <int key="connectionID">241</int> | |||
|
1440 | </object> | |||
|
1441 | <object class="IBConnectionRecord"> | |||
|
1442 | <object class="IBActionConnection" key="connection"> | |||
|
1443 | <string key="label">centerSelectionInVisibleArea:</string> | |||
|
1444 | <reference key="source" ref="1014"/> | |||
|
1445 | <reference key="destination" ref="88285865"/> | |||
|
1446 | </object> | |||
|
1447 | <int key="connectionID">245</int> | |||
|
1448 | </object> | |||
|
1449 | <object class="IBConnectionRecord"> | |||
|
1450 | <object class="IBActionConnection" key="connection"> | |||
|
1451 | <string key="label">toggleGrammarChecking:</string> | |||
|
1452 | <reference key="source" ref="1014"/> | |||
|
1453 | <reference key="destination" ref="967646866"/> | |||
|
1454 | </object> | |||
|
1455 | <int key="connectionID">347</int> | |||
|
1456 | </object> | |||
|
1457 | <object class="IBConnectionRecord"> | |||
|
1458 | <object class="IBActionConnection" key="connection"> | |||
|
1459 | <string key="label">toggleSmartInsertDelete:</string> | |||
|
1460 | <reference key="source" ref="1014"/> | |||
|
1461 | <reference key="destination" ref="605118523"/> | |||
|
1462 | </object> | |||
|
1463 | <int key="connectionID">355</int> | |||
|
1464 | </object> | |||
|
1465 | <object class="IBConnectionRecord"> | |||
|
1466 | <object class="IBActionConnection" key="connection"> | |||
|
1467 | <string key="label">toggleAutomaticQuoteSubstitution:</string> | |||
|
1468 | <reference key="source" ref="1014"/> | |||
|
1469 | <reference key="destination" ref="197661976"/> | |||
|
1470 | </object> | |||
|
1471 | <int key="connectionID">356</int> | |||
|
1472 | </object> | |||
|
1473 | <object class="IBConnectionRecord"> | |||
|
1474 | <object class="IBActionConnection" key="connection"> | |||
|
1475 | <string key="label">toggleAutomaticLinkDetection:</string> | |||
|
1476 | <reference key="source" ref="1014"/> | |||
|
1477 | <reference key="destination" ref="708854459"/> | |||
|
1478 | </object> | |||
|
1479 | <int key="connectionID">357</int> | |||
|
1480 | </object> | |||
|
1481 | <object class="IBConnectionRecord"> | |||
|
1482 | <object class="IBActionConnection" key="connection"> | |||
|
1483 | <string key="label">showHelp:</string> | |||
|
1484 | <reference key="source" ref="1014"/> | |||
|
1485 | <reference key="destination" ref="238773614"/> | |||
|
1486 | </object> | |||
|
1487 | <int key="connectionID">360</int> | |||
|
1488 | </object> | |||
|
1489 | <object class="IBConnectionRecord"> | |||
|
1490 | <object class="IBActionConnection" key="connection"> | |||
|
1491 | <string key="label">orderFrontColorPanel:</string> | |||
|
1492 | <reference key="source" ref="1014"/> | |||
|
1493 | <reference key="destination" ref="1028416764"/> | |||
|
1494 | </object> | |||
|
1495 | <int key="connectionID">361</int> | |||
|
1496 | </object> | |||
|
1497 | <object class="IBConnectionRecord"> | |||
|
1498 | <object class="IBActionConnection" key="connection"> | |||
|
1499 | <string key="label">saveDocument:</string> | |||
|
1500 | <reference key="source" ref="1014"/> | |||
|
1501 | <reference key="destination" ref="1023925487"/> | |||
|
1502 | </object> | |||
|
1503 | <int key="connectionID">362</int> | |||
|
1504 | </object> | |||
|
1505 | <object class="IBConnectionRecord"> | |||
|
1506 | <object class="IBActionConnection" key="connection"> | |||
|
1507 | <string key="label">saveDocumentAs:</string> | |||
|
1508 | <reference key="source" ref="1014"/> | |||
|
1509 | <reference key="destination" ref="117038363"/> | |||
|
1510 | </object> | |||
|
1511 | <int key="connectionID">363</int> | |||
|
1512 | </object> | |||
|
1513 | <object class="IBConnectionRecord"> | |||
|
1514 | <object class="IBActionConnection" key="connection"> | |||
|
1515 | <string key="label">revertDocumentToSaved:</string> | |||
|
1516 | <reference key="source" ref="1014"/> | |||
|
1517 | <reference key="destination" ref="579971712"/> | |||
|
1518 | </object> | |||
|
1519 | <int key="connectionID">364</int> | |||
|
1520 | </object> | |||
|
1521 | <object class="IBConnectionRecord"> | |||
|
1522 | <object class="IBActionConnection" key="connection"> | |||
|
1523 | <string key="label">runToolbarCustomizationPalette:</string> | |||
|
1524 | <reference key="source" ref="1014"/> | |||
|
1525 | <reference key="destination" ref="237841660"/> | |||
|
1526 | </object> | |||
|
1527 | <int key="connectionID">365</int> | |||
|
1528 | </object> | |||
|
1529 | <object class="IBConnectionRecord"> | |||
|
1530 | <object class="IBActionConnection" key="connection"> | |||
|
1531 | <string key="label">toggleToolbarShown:</string> | |||
|
1532 | <reference key="source" ref="1014"/> | |||
|
1533 | <reference key="destination" ref="102151532"/> | |||
|
1534 | </object> | |||
|
1535 | <int key="connectionID">366</int> | |||
|
1536 | </object> | |||
|
1537 | <object class="IBConnectionRecord"> | |||
|
1538 | <object class="IBActionConnection" key="connection"> | |||
|
1539 | <string key="label">hide:</string> | |||
|
1540 | <reference key="source" ref="1014"/> | |||
|
1541 | <reference key="destination" ref="755159360"/> | |||
|
1542 | </object> | |||
|
1543 | <int key="connectionID">367</int> | |||
|
1544 | </object> | |||
|
1545 | <object class="IBConnectionRecord"> | |||
|
1546 | <object class="IBActionConnection" key="connection"> | |||
|
1547 | <string key="label">hideOtherApplications:</string> | |||
|
1548 | <reference key="source" ref="1014"/> | |||
|
1549 | <reference key="destination" ref="342932134"/> | |||
|
1550 | </object> | |||
|
1551 | <int key="connectionID">368</int> | |||
|
1552 | </object> | |||
|
1553 | <object class="IBConnectionRecord"> | |||
|
1554 | <object class="IBActionConnection" key="connection"> | |||
|
1555 | <string key="label">terminate:</string> | |||
|
1556 | <reference key="source" ref="1014"/> | |||
|
1557 | <reference key="destination" ref="632727374"/> | |||
|
1558 | </object> | |||
|
1559 | <int key="connectionID">369</int> | |||
|
1560 | </object> | |||
|
1561 | <object class="IBConnectionRecord"> | |||
|
1562 | <object class="IBActionConnection" key="connection"> | |||
|
1563 | <string key="label">unhideAllApplications:</string> | |||
|
1564 | <reference key="source" ref="1014"/> | |||
|
1565 | <reference key="destination" ref="908899353"/> | |||
|
1566 | </object> | |||
|
1567 | <int key="connectionID">370</int> | |||
|
1568 | </object> | |||
|
1569 | <object class="IBConnectionRecord"> | |||
|
1570 | <object class="IBOutletConnection" key="connection"> | |||
|
1571 | <string key="label" id="606168085">delegate</string> | |||
|
1572 | <reference key="source" ref="1050"/> | |||
|
1573 | <reference key="destination" ref="610635028"/> | |||
|
1574 | </object> | |||
|
1575 | <int key="connectionID">374</int> | |||
|
1576 | </object> | |||
|
1577 | <object class="IBConnectionRecord"> | |||
|
1578 | <object class="IBBindingConnection" key="connection"> | |||
|
1579 | <string key="label" id="187454546">contentDictionary: userNS</string> | |||
|
1580 | <reference key="source" ref="808393665"/> | |||
|
1581 | <reference key="destination" ref="631572152"/> | |||
|
1582 | <object class="NSNibBindingConnector" key="connector"> | |||
|
1583 | <reference key="NSSource" ref="808393665"/> | |||
|
1584 | <reference key="NSDestination" ref="631572152"/> | |||
|
1585 | <reference key="NSLabel" ref="187454546"/> | |||
|
1586 | <string key="NSBinding">contentDictionary</string> | |||
|
1587 | <string key="NSKeyPath">userNS</string> | |||
|
1588 | <int key="NSNibBindingConnectorVersion">2</int> | |||
|
1589 | </object> | |||
|
1590 | </object> | |||
|
1591 | <int key="connectionID">424</int> | |||
|
1592 | </object> | |||
|
1593 | <object class="IBConnectionRecord"> | |||
|
1594 | <object class="IBBindingConnection" key="connection"> | |||
|
1595 | <string key="label" id="688370141">value: arrangedObjects.value</string> | |||
|
1596 | <reference key="source" ref="857054683"/> | |||
|
1597 | <reference key="destination" ref="808393665"/> | |||
|
1598 | <object class="NSNibBindingConnector" key="connector"> | |||
|
1599 | <reference key="NSSource" ref="857054683"/> | |||
|
1600 | <reference key="NSDestination" ref="808393665"/> | |||
|
1601 | <reference key="NSLabel" ref="688370141"/> | |||
|
1602 | <reference key="NSBinding" ref="276523235"/> | |||
|
1603 | <string key="NSKeyPath">arrangedObjects.value</string> | |||
|
1604 | <int key="NSNibBindingConnectorVersion">2</int> | |||
|
1605 | </object> | |||
|
1606 | </object> | |||
|
1607 | <int key="connectionID">427</int> | |||
|
1608 | </object> | |||
|
1609 | <object class="IBConnectionRecord"> | |||
|
1610 | <object class="IBBindingConnection" key="connection"> | |||
|
1611 | <string key="label" id="764859820">value: arrangedObjects.key</string> | |||
|
1612 | <reference key="source" ref="920426212"/> | |||
|
1613 | <reference key="destination" ref="808393665"/> | |||
|
1614 | <object class="NSNibBindingConnector" key="connector"> | |||
|
1615 | <reference key="NSSource" ref="920426212"/> | |||
|
1616 | <reference key="NSDestination" ref="808393665"/> | |||
|
1617 | <reference key="NSLabel" ref="764859820"/> | |||
|
1618 | <reference key="NSBinding" ref="276523235"/> | |||
|
1619 | <string key="NSKeyPath">arrangedObjects.key</string> | |||
|
1620 | <int key="NSNibBindingConnectorVersion">2</int> | |||
|
1621 | </object> | |||
|
1622 | </object> | |||
|
1623 | <int key="connectionID">428</int> | |||
|
1624 | </object> | |||
|
1625 | <object class="IBConnectionRecord"> | |||
|
1626 | <object class="IBOutletConnection" key="connection"> | |||
|
1627 | <reference key="label" ref="606168085"/> | |||
|
1628 | <reference key="source" ref="972006081"/> | |||
|
1629 | <reference key="destination" ref="631572152"/> | |||
|
1630 | </object> | |||
|
1631 | <int key="connectionID">429</int> | |||
|
1632 | </object> | |||
|
1633 | <object class="IBConnectionRecord"> | |||
|
1634 | <object class="IBBindingConnection" key="connection"> | |||
|
1635 | <string key="label" id="97087091">animate: waitingForEngine</string> | |||
|
1636 | <reference key="source" ref="74807016"/> | |||
|
1637 | <reference key="destination" ref="631572152"/> | |||
|
1638 | <object class="NSNibBindingConnector" key="connector"> | |||
|
1639 | <reference key="NSSource" ref="74807016"/> | |||
|
1640 | <reference key="NSDestination" ref="631572152"/> | |||
|
1641 | <reference key="NSLabel" ref="97087091"/> | |||
|
1642 | <string key="NSBinding">animate</string> | |||
|
1643 | <string key="NSKeyPath">waitingForEngine</string> | |||
|
1644 | <int key="NSNibBindingConnectorVersion">2</int> | |||
|
1645 | </object> | |||
|
1646 | </object> | |||
|
1647 | <int key="connectionID">437</int> | |||
|
1648 | </object> | |||
|
1649 | <object class="IBConnectionRecord"> | |||
|
1650 | <object class="IBBindingConnection" key="connection"> | |||
|
1651 | <string key="label" id="289275654">filterPredicate: workspaceFilterPredicate</string> | |||
|
1652 | <reference key="source" ref="808393665"/> | |||
|
1653 | <reference key="destination" ref="610635028"/> | |||
|
1654 | <object class="NSNibBindingConnector" key="connector"> | |||
|
1655 | <reference key="NSSource" ref="808393665"/> | |||
|
1656 | <reference key="NSDestination" ref="610635028"/> | |||
|
1657 | <reference key="NSLabel" ref="289275654"/> | |||
|
1658 | <string key="NSBinding">filterPredicate</string> | |||
|
1659 | <string key="NSKeyPath">workspaceFilterPredicate</string> | |||
|
1660 | <int key="NSNibBindingConnectorVersion">2</int> | |||
|
1661 | </object> | |||
|
1662 | </object> | |||
|
1663 | <int key="connectionID">440</int> | |||
|
1664 | </object> | |||
|
1665 | <object class="IBConnectionRecord"> | |||
|
1666 | <object class="IBOutletConnection" key="connection"> | |||
|
1667 | <string key="label">ipythonController</string> | |||
|
1668 | <reference key="source" ref="610635028"/> | |||
|
1669 | <reference key="destination" ref="631572152"/> | |||
|
1670 | </object> | |||
|
1671 | <int key="connectionID">441</int> | |||
|
1672 | </object> | |||
|
1673 | <object class="IBConnectionRecord"> | |||
|
1674 | <object class="IBOutletConnection" key="connection"> | |||
|
1675 | <string key="label" id="684042788">textView</string> | |||
|
1676 | <reference key="source" ref="631572152"/> | |||
|
1677 | <reference key="destination" ref="163417131"/> | |||
|
1678 | </object> | |||
|
1679 | <int key="connectionID">444</int> | |||
|
1680 | </object> | |||
|
1681 | <object class="IBConnectionRecord"> | |||
|
1682 | <object class="IBOutletConnection" key="connection"> | |||
|
1683 | <string key="label">initialFirstResponder</string> | |||
|
1684 | <reference key="source" ref="972006081"/> | |||
|
1685 | <reference key="destination" ref="163417131"/> | |||
|
1686 | </object> | |||
|
1687 | <int key="connectionID">445</int> | |||
|
1688 | </object> | |||
|
1689 | </object> | |||
|
1690 | <object class="IBMutableOrderedSet" key="objectRecords"> | |||
|
1691 | <object class="NSArray" key="orderedObjects"> | |||
|
1692 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1693 | <object class="IBObjectRecord"> | |||
|
1694 | <int key="objectID">0</int> | |||
|
1695 | <object class="NSArray" key="object" id="1049"> | |||
|
1696 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1697 | </object> | |||
|
1698 | <reference key="children" ref="1048"/> | |||
|
1699 | <nil key="parent"/> | |||
|
1700 | </object> | |||
|
1701 | <object class="IBObjectRecord"> | |||
|
1702 | <int key="objectID">-2</int> | |||
|
1703 | <reference key="object" ref="1021"/> | |||
|
1704 | <reference key="parent" ref="1049"/> | |||
|
1705 | <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> | |||
|
1706 | </object> | |||
|
1707 | <object class="IBObjectRecord"> | |||
|
1708 | <int key="objectID">-1</int> | |||
|
1709 | <reference key="object" ref="1014"/> | |||
|
1710 | <reference key="parent" ref="1049"/> | |||
|
1711 | <string key="objectName">First Responder</string> | |||
|
1712 | </object> | |||
|
1713 | <object class="IBObjectRecord"> | |||
|
1714 | <int key="objectID">-3</int> | |||
|
1715 | <reference key="object" ref="1050"/> | |||
|
1716 | <reference key="parent" ref="1049"/> | |||
|
1717 | <string key="objectName">Application</string> | |||
|
1718 | </object> | |||
|
1719 | <object class="IBObjectRecord"> | |||
|
1720 | <int key="objectID">29</int> | |||
|
1721 | <reference key="object" ref="649796088"/> | |||
|
1722 | <object class="NSMutableArray" key="children"> | |||
|
1723 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1724 | <reference ref="713487014"/> | |||
|
1725 | <reference ref="694149608"/> | |||
|
1726 | <reference ref="391199113"/> | |||
|
1727 | <reference ref="952259628"/> | |||
|
1728 | <reference ref="379814623"/> | |||
|
1729 | <reference ref="586577488"/> | |||
|
1730 | <reference ref="626404410"/> | |||
|
1731 | </object> | |||
|
1732 | <reference key="parent" ref="1049"/> | |||
|
1733 | <string key="objectName">MainMenu</string> | |||
|
1734 | </object> | |||
|
1735 | <object class="IBObjectRecord"> | |||
|
1736 | <int key="objectID">19</int> | |||
|
1737 | <reference key="object" ref="713487014"/> | |||
|
1738 | <object class="NSMutableArray" key="children"> | |||
|
1739 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1740 | <reference ref="835318025"/> | |||
|
1741 | </object> | |||
|
1742 | <reference key="parent" ref="649796088"/> | |||
|
1743 | </object> | |||
|
1744 | <object class="IBObjectRecord"> | |||
|
1745 | <int key="objectID">56</int> | |||
|
1746 | <reference key="object" ref="694149608"/> | |||
|
1747 | <object class="NSMutableArray" key="children"> | |||
|
1748 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1749 | <reference ref="110575045"/> | |||
|
1750 | </object> | |||
|
1751 | <reference key="parent" ref="649796088"/> | |||
|
1752 | </object> | |||
|
1753 | <object class="IBObjectRecord"> | |||
|
1754 | <int key="objectID">103</int> | |||
|
1755 | <reference key="object" ref="391199113"/> | |||
|
1756 | <object class="NSMutableArray" key="children"> | |||
|
1757 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1758 | <reference ref="374024848"/> | |||
|
1759 | </object> | |||
|
1760 | <reference key="parent" ref="649796088"/> | |||
|
1761 | <string key="objectName" id="508169456">1</string> | |||
|
1762 | </object> | |||
|
1763 | <object class="IBObjectRecord"> | |||
|
1764 | <int key="objectID">217</int> | |||
|
1765 | <reference key="object" ref="952259628"/> | |||
|
1766 | <object class="NSMutableArray" key="children"> | |||
|
1767 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1768 | <reference ref="789758025"/> | |||
|
1769 | </object> | |||
|
1770 | <reference key="parent" ref="649796088"/> | |||
|
1771 | </object> | |||
|
1772 | <object class="IBObjectRecord"> | |||
|
1773 | <int key="objectID">83</int> | |||
|
1774 | <reference key="object" ref="379814623"/> | |||
|
1775 | <object class="NSMutableArray" key="children"> | |||
|
1776 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1777 | <reference ref="720053764"/> | |||
|
1778 | </object> | |||
|
1779 | <reference key="parent" ref="649796088"/> | |||
|
1780 | </object> | |||
|
1781 | <object class="IBObjectRecord"> | |||
|
1782 | <int key="objectID">81</int> | |||
|
1783 | <reference key="object" ref="720053764"/> | |||
|
1784 | <object class="NSMutableArray" key="children"> | |||
|
1785 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1786 | <reference ref="1023925487"/> | |||
|
1787 | <reference ref="117038363"/> | |||
|
1788 | <reference ref="49223823"/> | |||
|
1789 | <reference ref="722745758"/> | |||
|
1790 | <reference ref="705341025"/> | |||
|
1791 | <reference ref="1025936716"/> | |||
|
1792 | <reference ref="294629803"/> | |||
|
1793 | <reference ref="776162233"/> | |||
|
1794 | <reference ref="425164168"/> | |||
|
1795 | <reference ref="579971712"/> | |||
|
1796 | <reference ref="1010469920"/> | |||
|
1797 | </object> | |||
|
1798 | <reference key="parent" ref="379814623"/> | |||
|
1799 | </object> | |||
|
1800 | <object class="IBObjectRecord"> | |||
|
1801 | <int key="objectID">75</int> | |||
|
1802 | <reference key="object" ref="1023925487"/> | |||
|
1803 | <reference key="parent" ref="720053764"/> | |||
|
1804 | <string key="objectName">3</string> | |||
|
1805 | </object> | |||
|
1806 | <object class="IBObjectRecord"> | |||
|
1807 | <int key="objectID">80</int> | |||
|
1808 | <reference key="object" ref="117038363"/> | |||
|
1809 | <reference key="parent" ref="720053764"/> | |||
|
1810 | <string key="objectName">8</string> | |||
|
1811 | </object> | |||
|
1812 | <object class="IBObjectRecord"> | |||
|
1813 | <int key="objectID">78</int> | |||
|
1814 | <reference key="object" ref="49223823"/> | |||
|
1815 | <reference key="parent" ref="720053764"/> | |||
|
1816 | <string key="objectName">6</string> | |||
|
1817 | </object> | |||
|
1818 | <object class="IBObjectRecord"> | |||
|
1819 | <int key="objectID">72</int> | |||
|
1820 | <reference key="object" ref="722745758"/> | |||
|
1821 | <reference key="parent" ref="720053764"/> | |||
|
1822 | </object> | |||
|
1823 | <object class="IBObjectRecord"> | |||
|
1824 | <int key="objectID">82</int> | |||
|
1825 | <reference key="object" ref="705341025"/> | |||
|
1826 | <reference key="parent" ref="720053764"/> | |||
|
1827 | <string key="objectName">9</string> | |||
|
1828 | </object> | |||
|
1829 | <object class="IBObjectRecord"> | |||
|
1830 | <int key="objectID">124</int> | |||
|
1831 | <reference key="object" ref="1025936716"/> | |||
|
1832 | <object class="NSMutableArray" key="children"> | |||
|
1833 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1834 | <reference ref="1065607017"/> | |||
|
1835 | </object> | |||
|
1836 | <reference key="parent" ref="720053764"/> | |||
|
1837 | </object> | |||
|
1838 | <object class="IBObjectRecord"> | |||
|
1839 | <int key="objectID">77</int> | |||
|
1840 | <reference key="object" ref="294629803"/> | |||
|
1841 | <reference key="parent" ref="720053764"/> | |||
|
1842 | <string key="objectName">5</string> | |||
|
1843 | </object> | |||
|
1844 | <object class="IBObjectRecord"> | |||
|
1845 | <int key="objectID">73</int> | |||
|
1846 | <reference key="object" ref="776162233"/> | |||
|
1847 | <reference key="parent" ref="720053764"/> | |||
|
1848 | <reference key="objectName" ref="508169456"/> | |||
|
1849 | </object> | |||
|
1850 | <object class="IBObjectRecord"> | |||
|
1851 | <int key="objectID">79</int> | |||
|
1852 | <reference key="object" ref="425164168"/> | |||
|
1853 | <reference key="parent" ref="720053764"/> | |||
|
1854 | <string key="objectName">7</string> | |||
|
1855 | </object> | |||
|
1856 | <object class="IBObjectRecord"> | |||
|
1857 | <int key="objectID">112</int> | |||
|
1858 | <reference key="object" ref="579971712"/> | |||
|
1859 | <reference key="parent" ref="720053764"/> | |||
|
1860 | <string key="objectName">10</string> | |||
|
1861 | </object> | |||
|
1862 | <object class="IBObjectRecord"> | |||
|
1863 | <int key="objectID">74</int> | |||
|
1864 | <reference key="object" ref="1010469920"/> | |||
|
1865 | <reference key="parent" ref="720053764"/> | |||
|
1866 | <string key="objectName" id="464456376">2</string> | |||
|
1867 | </object> | |||
|
1868 | <object class="IBObjectRecord"> | |||
|
1869 | <int key="objectID">125</int> | |||
|
1870 | <reference key="object" ref="1065607017"/> | |||
|
1871 | <object class="NSMutableArray" key="children"> | |||
|
1872 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1873 | <reference ref="759406840"/> | |||
|
1874 | </object> | |||
|
1875 | <reference key="parent" ref="1025936716"/> | |||
|
1876 | </object> | |||
|
1877 | <object class="IBObjectRecord"> | |||
|
1878 | <int key="objectID">126</int> | |||
|
1879 | <reference key="object" ref="759406840"/> | |||
|
1880 | <reference key="parent" ref="1065607017"/> | |||
|
1881 | </object> | |||
|
1882 | <object class="IBObjectRecord"> | |||
|
1883 | <int key="objectID">205</int> | |||
|
1884 | <reference key="object" ref="789758025"/> | |||
|
1885 | <object class="NSMutableArray" key="children"> | |||
|
1886 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1887 | <reference ref="437104165"/> | |||
|
1888 | <reference ref="583158037"/> | |||
|
1889 | <reference ref="1058277027"/> | |||
|
1890 | <reference ref="212016141"/> | |||
|
1891 | <reference ref="296257095"/> | |||
|
1892 | <reference ref="29853731"/> | |||
|
1893 | <reference ref="860595796"/> | |||
|
1894 | <reference ref="1040322652"/> | |||
|
1895 | <reference ref="790794224"/> | |||
|
1896 | <reference ref="892235320"/> | |||
|
1897 | <reference ref="972420730"/> | |||
|
1898 | <reference ref="676164635"/> | |||
|
1899 | <reference ref="507821607"/> | |||
|
1900 | </object> | |||
|
1901 | <reference key="parent" ref="952259628"/> | |||
|
1902 | </object> | |||
|
1903 | <object class="IBObjectRecord"> | |||
|
1904 | <int key="objectID">202</int> | |||
|
1905 | <reference key="object" ref="437104165"/> | |||
|
1906 | <reference key="parent" ref="789758025"/> | |||
|
1907 | </object> | |||
|
1908 | <object class="IBObjectRecord"> | |||
|
1909 | <int key="objectID">198</int> | |||
|
1910 | <reference key="object" ref="583158037"/> | |||
|
1911 | <reference key="parent" ref="789758025"/> | |||
|
1912 | </object> | |||
|
1913 | <object class="IBObjectRecord"> | |||
|
1914 | <int key="objectID">207</int> | |||
|
1915 | <reference key="object" ref="1058277027"/> | |||
|
1916 | <reference key="parent" ref="789758025"/> | |||
|
1917 | </object> | |||
|
1918 | <object class="IBObjectRecord"> | |||
|
1919 | <int key="objectID">214</int> | |||
|
1920 | <reference key="object" ref="212016141"/> | |||
|
1921 | <reference key="parent" ref="789758025"/> | |||
|
1922 | </object> | |||
|
1923 | <object class="IBObjectRecord"> | |||
|
1924 | <int key="objectID">199</int> | |||
|
1925 | <reference key="object" ref="296257095"/> | |||
|
1926 | <reference key="parent" ref="789758025"/> | |||
|
1927 | </object> | |||
|
1928 | <object class="IBObjectRecord"> | |||
|
1929 | <int key="objectID">203</int> | |||
|
1930 | <reference key="object" ref="29853731"/> | |||
|
1931 | <reference key="parent" ref="789758025"/> | |||
|
1932 | </object> | |||
|
1933 | <object class="IBObjectRecord"> | |||
|
1934 | <int key="objectID">197</int> | |||
|
1935 | <reference key="object" ref="860595796"/> | |||
|
1936 | <reference key="parent" ref="789758025"/> | |||
|
1937 | </object> | |||
|
1938 | <object class="IBObjectRecord"> | |||
|
1939 | <int key="objectID">206</int> | |||
|
1940 | <reference key="object" ref="1040322652"/> | |||
|
1941 | <reference key="parent" ref="789758025"/> | |||
|
1942 | </object> | |||
|
1943 | <object class="IBObjectRecord"> | |||
|
1944 | <int key="objectID">215</int> | |||
|
1945 | <reference key="object" ref="790794224"/> | |||
|
1946 | <reference key="parent" ref="789758025"/> | |||
|
1947 | </object> | |||
|
1948 | <object class="IBObjectRecord"> | |||
|
1949 | <int key="objectID">218</int> | |||
|
1950 | <reference key="object" ref="892235320"/> | |||
|
1951 | <object class="NSMutableArray" key="children"> | |||
|
1952 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1953 | <reference ref="963351320"/> | |||
|
1954 | </object> | |||
|
1955 | <reference key="parent" ref="789758025"/> | |||
|
1956 | </object> | |||
|
1957 | <object class="IBObjectRecord"> | |||
|
1958 | <int key="objectID">216</int> | |||
|
1959 | <reference key="object" ref="972420730"/> | |||
|
1960 | <object class="NSMutableArray" key="children"> | |||
|
1961 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1962 | <reference ref="769623530"/> | |||
|
1963 | </object> | |||
|
1964 | <reference key="parent" ref="789758025"/> | |||
|
1965 | </object> | |||
|
1966 | <object class="IBObjectRecord"> | |||
|
1967 | <int key="objectID">200</int> | |||
|
1968 | <reference key="object" ref="769623530"/> | |||
|
1969 | <object class="NSMutableArray" key="children"> | |||
|
1970 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1971 | <reference ref="948374510"/> | |||
|
1972 | <reference ref="96193923"/> | |||
|
1973 | <reference ref="679648819"/> | |||
|
1974 | <reference ref="967646866"/> | |||
|
1975 | </object> | |||
|
1976 | <reference key="parent" ref="972420730"/> | |||
|
1977 | </object> | |||
|
1978 | <object class="IBObjectRecord"> | |||
|
1979 | <int key="objectID">219</int> | |||
|
1980 | <reference key="object" ref="948374510"/> | |||
|
1981 | <reference key="parent" ref="769623530"/> | |||
|
1982 | </object> | |||
|
1983 | <object class="IBObjectRecord"> | |||
|
1984 | <int key="objectID">201</int> | |||
|
1985 | <reference key="object" ref="96193923"/> | |||
|
1986 | <reference key="parent" ref="769623530"/> | |||
|
1987 | </object> | |||
|
1988 | <object class="IBObjectRecord"> | |||
|
1989 | <int key="objectID">204</int> | |||
|
1990 | <reference key="object" ref="679648819"/> | |||
|
1991 | <reference key="parent" ref="769623530"/> | |||
|
1992 | </object> | |||
|
1993 | <object class="IBObjectRecord"> | |||
|
1994 | <int key="objectID">220</int> | |||
|
1995 | <reference key="object" ref="963351320"/> | |||
|
1996 | <object class="NSMutableArray" key="children"> | |||
|
1997 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
1998 | <reference ref="270902937"/> | |||
|
1999 | <reference ref="88285865"/> | |||
|
2000 | <reference ref="159080638"/> | |||
|
2001 | <reference ref="326711663"/> | |||
|
2002 | <reference ref="447796847"/> | |||
|
2003 | </object> | |||
|
2004 | <reference key="parent" ref="892235320"/> | |||
|
2005 | </object> | |||
|
2006 | <object class="IBObjectRecord"> | |||
|
2007 | <int key="objectID">213</int> | |||
|
2008 | <reference key="object" ref="270902937"/> | |||
|
2009 | <reference key="parent" ref="963351320"/> | |||
|
2010 | </object> | |||
|
2011 | <object class="IBObjectRecord"> | |||
|
2012 | <int key="objectID">210</int> | |||
|
2013 | <reference key="object" ref="88285865"/> | |||
|
2014 | <reference key="parent" ref="963351320"/> | |||
|
2015 | </object> | |||
|
2016 | <object class="IBObjectRecord"> | |||
|
2017 | <int key="objectID">221</int> | |||
|
2018 | <reference key="object" ref="159080638"/> | |||
|
2019 | <reference key="parent" ref="963351320"/> | |||
|
2020 | </object> | |||
|
2021 | <object class="IBObjectRecord"> | |||
|
2022 | <int key="objectID">208</int> | |||
|
2023 | <reference key="object" ref="326711663"/> | |||
|
2024 | <reference key="parent" ref="963351320"/> | |||
|
2025 | </object> | |||
|
2026 | <object class="IBObjectRecord"> | |||
|
2027 | <int key="objectID">209</int> | |||
|
2028 | <reference key="object" ref="447796847"/> | |||
|
2029 | <reference key="parent" ref="963351320"/> | |||
|
2030 | </object> | |||
|
2031 | <object class="IBObjectRecord"> | |||
|
2032 | <int key="objectID">106</int> | |||
|
2033 | <reference key="object" ref="374024848"/> | |||
|
2034 | <object class="NSMutableArray" key="children"> | |||
|
2035 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2036 | <reference ref="238773614"/> | |||
|
2037 | </object> | |||
|
2038 | <reference key="parent" ref="391199113"/> | |||
|
2039 | <reference key="objectName" ref="464456376"/> | |||
|
2040 | </object> | |||
|
2041 | <object class="IBObjectRecord"> | |||
|
2042 | <int key="objectID">111</int> | |||
|
2043 | <reference key="object" ref="238773614"/> | |||
|
2044 | <reference key="parent" ref="374024848"/> | |||
|
2045 | </object> | |||
|
2046 | <object class="IBObjectRecord"> | |||
|
2047 | <int key="objectID">57</int> | |||
|
2048 | <reference key="object" ref="110575045"/> | |||
|
2049 | <object class="NSMutableArray" key="children"> | |||
|
2050 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2051 | <reference ref="238522557"/> | |||
|
2052 | <reference ref="755159360"/> | |||
|
2053 | <reference ref="908899353"/> | |||
|
2054 | <reference ref="632727374"/> | |||
|
2055 | <reference ref="646227648"/> | |||
|
2056 | <reference ref="609285721"/> | |||
|
2057 | <reference ref="481834944"/> | |||
|
2058 | <reference ref="304266470"/> | |||
|
2059 | <reference ref="1046388886"/> | |||
|
2060 | <reference ref="1056857174"/> | |||
|
2061 | <reference ref="342932134"/> | |||
|
2062 | </object> | |||
|
2063 | <reference key="parent" ref="694149608"/> | |||
|
2064 | </object> | |||
|
2065 | <object class="IBObjectRecord"> | |||
|
2066 | <int key="objectID">58</int> | |||
|
2067 | <reference key="object" ref="238522557"/> | |||
|
2068 | <reference key="parent" ref="110575045"/> | |||
|
2069 | </object> | |||
|
2070 | <object class="IBObjectRecord"> | |||
|
2071 | <int key="objectID">134</int> | |||
|
2072 | <reference key="object" ref="755159360"/> | |||
|
2073 | <reference key="parent" ref="110575045"/> | |||
|
2074 | </object> | |||
|
2075 | <object class="IBObjectRecord"> | |||
|
2076 | <int key="objectID">150</int> | |||
|
2077 | <reference key="object" ref="908899353"/> | |||
|
2078 | <reference key="parent" ref="110575045"/> | |||
|
2079 | </object> | |||
|
2080 | <object class="IBObjectRecord"> | |||
|
2081 | <int key="objectID">136</int> | |||
|
2082 | <reference key="object" ref="632727374"/> | |||
|
2083 | <reference key="parent" ref="110575045"/> | |||
|
2084 | <string key="objectName">1111</string> | |||
|
2085 | </object> | |||
|
2086 | <object class="IBObjectRecord"> | |||
|
2087 | <int key="objectID">144</int> | |||
|
2088 | <reference key="object" ref="646227648"/> | |||
|
2089 | <reference key="parent" ref="110575045"/> | |||
|
2090 | </object> | |||
|
2091 | <object class="IBObjectRecord"> | |||
|
2092 | <int key="objectID">129</int> | |||
|
2093 | <reference key="object" ref="609285721"/> | |||
|
2094 | <reference key="parent" ref="110575045"/> | |||
|
2095 | <string key="objectName">121</string> | |||
|
2096 | </object> | |||
|
2097 | <object class="IBObjectRecord"> | |||
|
2098 | <int key="objectID">143</int> | |||
|
2099 | <reference key="object" ref="481834944"/> | |||
|
2100 | <reference key="parent" ref="110575045"/> | |||
|
2101 | </object> | |||
|
2102 | <object class="IBObjectRecord"> | |||
|
2103 | <int key="objectID">236</int> | |||
|
2104 | <reference key="object" ref="304266470"/> | |||
|
2105 | <reference key="parent" ref="110575045"/> | |||
|
2106 | </object> | |||
|
2107 | <object class="IBObjectRecord"> | |||
|
2108 | <int key="objectID">131</int> | |||
|
2109 | <reference key="object" ref="1046388886"/> | |||
|
2110 | <object class="NSMutableArray" key="children"> | |||
|
2111 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2112 | <reference ref="752062318"/> | |||
|
2113 | </object> | |||
|
2114 | <reference key="parent" ref="110575045"/> | |||
|
2115 | </object> | |||
|
2116 | <object class="IBObjectRecord"> | |||
|
2117 | <int key="objectID">149</int> | |||
|
2118 | <reference key="object" ref="1056857174"/> | |||
|
2119 | <reference key="parent" ref="110575045"/> | |||
|
2120 | </object> | |||
|
2121 | <object class="IBObjectRecord"> | |||
|
2122 | <int key="objectID">145</int> | |||
|
2123 | <reference key="object" ref="342932134"/> | |||
|
2124 | <reference key="parent" ref="110575045"/> | |||
|
2125 | </object> | |||
|
2126 | <object class="IBObjectRecord"> | |||
|
2127 | <int key="objectID">130</int> | |||
|
2128 | <reference key="object" ref="752062318"/> | |||
|
2129 | <reference key="parent" ref="1046388886"/> | |||
|
2130 | </object> | |||
|
2131 | <object class="IBObjectRecord"> | |||
|
2132 | <int key="objectID">24</int> | |||
|
2133 | <reference key="object" ref="835318025"/> | |||
|
2134 | <object class="NSMutableArray" key="children"> | |||
|
2135 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2136 | <reference ref="299356726"/> | |||
|
2137 | <reference ref="625202149"/> | |||
|
2138 | <reference ref="575023229"/> | |||
|
2139 | <reference ref="1011231497"/> | |||
|
2140 | </object> | |||
|
2141 | <reference key="parent" ref="713487014"/> | |||
|
2142 | </object> | |||
|
2143 | <object class="IBObjectRecord"> | |||
|
2144 | <int key="objectID">92</int> | |||
|
2145 | <reference key="object" ref="299356726"/> | |||
|
2146 | <reference key="parent" ref="835318025"/> | |||
|
2147 | </object> | |||
|
2148 | <object class="IBObjectRecord"> | |||
|
2149 | <int key="objectID">5</int> | |||
|
2150 | <reference key="object" ref="625202149"/> | |||
|
2151 | <reference key="parent" ref="835318025"/> | |||
|
2152 | </object> | |||
|
2153 | <object class="IBObjectRecord"> | |||
|
2154 | <int key="objectID">239</int> | |||
|
2155 | <reference key="object" ref="575023229"/> | |||
|
2156 | <reference key="parent" ref="835318025"/> | |||
|
2157 | </object> | |||
|
2158 | <object class="IBObjectRecord"> | |||
|
2159 | <int key="objectID">23</int> | |||
|
2160 | <reference key="object" ref="1011231497"/> | |||
|
2161 | <reference key="parent" ref="835318025"/> | |||
|
2162 | </object> | |||
|
2163 | <object class="IBObjectRecord"> | |||
|
2164 | <int key="objectID">295</int> | |||
|
2165 | <reference key="object" ref="586577488"/> | |||
|
2166 | <object class="NSMutableArray" key="children"> | |||
|
2167 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2168 | <reference ref="466310130"/> | |||
|
2169 | </object> | |||
|
2170 | <reference key="parent" ref="649796088"/> | |||
|
2171 | </object> | |||
|
2172 | <object class="IBObjectRecord"> | |||
|
2173 | <int key="objectID">296</int> | |||
|
2174 | <reference key="object" ref="466310130"/> | |||
|
2175 | <object class="NSMutableArray" key="children"> | |||
|
2176 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2177 | <reference ref="102151532"/> | |||
|
2178 | <reference ref="237841660"/> | |||
|
2179 | </object> | |||
|
2180 | <reference key="parent" ref="586577488"/> | |||
|
2181 | </object> | |||
|
2182 | <object class="IBObjectRecord"> | |||
|
2183 | <int key="objectID">297</int> | |||
|
2184 | <reference key="object" ref="102151532"/> | |||
|
2185 | <reference key="parent" ref="466310130"/> | |||
|
2186 | </object> | |||
|
2187 | <object class="IBObjectRecord"> | |||
|
2188 | <int key="objectID">298</int> | |||
|
2189 | <reference key="object" ref="237841660"/> | |||
|
2190 | <reference key="parent" ref="466310130"/> | |||
|
2191 | </object> | |||
|
2192 | <object class="IBObjectRecord"> | |||
|
2193 | <int key="objectID">299</int> | |||
|
2194 | <reference key="object" ref="626404410"/> | |||
|
2195 | <object class="NSMutableArray" key="children"> | |||
|
2196 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2197 | <reference ref="502084290"/> | |||
|
2198 | </object> | |||
|
2199 | <reference key="parent" ref="649796088"/> | |||
|
2200 | </object> | |||
|
2201 | <object class="IBObjectRecord"> | |||
|
2202 | <int key="objectID">300</int> | |||
|
2203 | <reference key="object" ref="502084290"/> | |||
|
2204 | <object class="NSMutableArray" key="children"> | |||
|
2205 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2206 | <reference ref="519768076"/> | |||
|
2207 | <reference ref="1028416764"/> | |||
|
2208 | </object> | |||
|
2209 | <reference key="parent" ref="626404410"/> | |||
|
2210 | </object> | |||
|
2211 | <object class="IBObjectRecord"> | |||
|
2212 | <int key="objectID">344</int> | |||
|
2213 | <reference key="object" ref="519768076"/> | |||
|
2214 | <reference key="parent" ref="502084290"/> | |||
|
2215 | </object> | |||
|
2216 | <object class="IBObjectRecord"> | |||
|
2217 | <int key="objectID">345</int> | |||
|
2218 | <reference key="object" ref="1028416764"/> | |||
|
2219 | <reference key="parent" ref="502084290"/> | |||
|
2220 | </object> | |||
|
2221 | <object class="IBObjectRecord"> | |||
|
2222 | <int key="objectID">211</int> | |||
|
2223 | <reference key="object" ref="676164635"/> | |||
|
2224 | <object class="NSMutableArray" key="children"> | |||
|
2225 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2226 | <reference ref="785027613"/> | |||
|
2227 | </object> | |||
|
2228 | <reference key="parent" ref="789758025"/> | |||
|
2229 | </object> | |||
|
2230 | <object class="IBObjectRecord"> | |||
|
2231 | <int key="objectID">212</int> | |||
|
2232 | <reference key="object" ref="785027613"/> | |||
|
2233 | <object class="NSMutableArray" key="children"> | |||
|
2234 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2235 | <reference ref="680220178"/> | |||
|
2236 | <reference ref="731782645"/> | |||
|
2237 | </object> | |||
|
2238 | <reference key="parent" ref="676164635"/> | |||
|
2239 | </object> | |||
|
2240 | <object class="IBObjectRecord"> | |||
|
2241 | <int key="objectID">195</int> | |||
|
2242 | <reference key="object" ref="680220178"/> | |||
|
2243 | <reference key="parent" ref="785027613"/> | |||
|
2244 | </object> | |||
|
2245 | <object class="IBObjectRecord"> | |||
|
2246 | <int key="objectID">196</int> | |||
|
2247 | <reference key="object" ref="731782645"/> | |||
|
2248 | <reference key="parent" ref="785027613"/> | |||
|
2249 | </object> | |||
|
2250 | <object class="IBObjectRecord"> | |||
|
2251 | <int key="objectID">346</int> | |||
|
2252 | <reference key="object" ref="967646866"/> | |||
|
2253 | <reference key="parent" ref="769623530"/> | |||
|
2254 | </object> | |||
|
2255 | <object class="IBObjectRecord"> | |||
|
2256 | <int key="objectID">348</int> | |||
|
2257 | <reference key="object" ref="507821607"/> | |||
|
2258 | <object class="NSMutableArray" key="children"> | |||
|
2259 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2260 | <reference ref="698887838"/> | |||
|
2261 | </object> | |||
|
2262 | <reference key="parent" ref="789758025"/> | |||
|
2263 | </object> | |||
|
2264 | <object class="IBObjectRecord"> | |||
|
2265 | <int key="objectID">349</int> | |||
|
2266 | <reference key="object" ref="698887838"/> | |||
|
2267 | <object class="NSMutableArray" key="children"> | |||
|
2268 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2269 | <reference ref="605118523"/> | |||
|
2270 | <reference ref="197661976"/> | |||
|
2271 | <reference ref="708854459"/> | |||
|
2272 | </object> | |||
|
2273 | <reference key="parent" ref="507821607"/> | |||
|
2274 | </object> | |||
|
2275 | <object class="IBObjectRecord"> | |||
|
2276 | <int key="objectID">350</int> | |||
|
2277 | <reference key="object" ref="605118523"/> | |||
|
2278 | <reference key="parent" ref="698887838"/> | |||
|
2279 | </object> | |||
|
2280 | <object class="IBObjectRecord"> | |||
|
2281 | <int key="objectID">351</int> | |||
|
2282 | <reference key="object" ref="197661976"/> | |||
|
2283 | <reference key="parent" ref="698887838"/> | |||
|
2284 | </object> | |||
|
2285 | <object class="IBObjectRecord"> | |||
|
2286 | <int key="objectID">354</int> | |||
|
2287 | <reference key="object" ref="708854459"/> | |||
|
2288 | <reference key="parent" ref="698887838"/> | |||
|
2289 | </object> | |||
|
2290 | <object class="IBObjectRecord"> | |||
|
2291 | <int key="objectID">371</int> | |||
|
2292 | <reference key="object" ref="972006081"/> | |||
|
2293 | <object class="NSMutableArray" key="children"> | |||
|
2294 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2295 | <reference ref="439893737"/> | |||
|
2296 | </object> | |||
|
2297 | <reference key="parent" ref="1049"/> | |||
|
2298 | </object> | |||
|
2299 | <object class="IBObjectRecord"> | |||
|
2300 | <int key="objectID">372</int> | |||
|
2301 | <reference key="object" ref="439893737"/> | |||
|
2302 | <object class="NSMutableArray" key="children"> | |||
|
2303 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2304 | <reference ref="741760375"/> | |||
|
2305 | <reference ref="74807016"/> | |||
|
2306 | </object> | |||
|
2307 | <reference key="parent" ref="972006081"/> | |||
|
2308 | </object> | |||
|
2309 | <object class="IBObjectRecord"> | |||
|
2310 | <int key="objectID">373</int> | |||
|
2311 | <reference key="object" ref="610635028"/> | |||
|
2312 | <reference key="parent" ref="1049"/> | |||
|
2313 | <reference key="objectName" ref="982950837"/> | |||
|
2314 | </object> | |||
|
2315 | <object class="IBObjectRecord"> | |||
|
2316 | <int key="objectID">385</int> | |||
|
2317 | <reference key="object" ref="808393665"/> | |||
|
2318 | <reference key="parent" ref="1049"/> | |||
|
2319 | <string key="objectName">User Namespace Controller</string> | |||
|
2320 | </object> | |||
|
2321 | <object class="IBObjectRecord"> | |||
|
2322 | <int key="objectID">421</int> | |||
|
2323 | <reference key="object" ref="741760375"/> | |||
|
2324 | <object class="NSMutableArray" key="children"> | |||
|
2325 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2326 | <reference ref="554641139"/> | |||
|
2327 | <reference ref="764100755"/> | |||
|
2328 | </object> | |||
|
2329 | <reference key="parent" ref="439893737"/> | |||
|
2330 | </object> | |||
|
2331 | <object class="IBObjectRecord"> | |||
|
2332 | <int key="objectID">420</int> | |||
|
2333 | <reference key="object" ref="554641139"/> | |||
|
2334 | <object class="NSMutableArray" key="children"> | |||
|
2335 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2336 | <reference ref="188193463"/> | |||
|
2337 | </object> | |||
|
2338 | <reference key="parent" ref="741760375"/> | |||
|
2339 | </object> | |||
|
2340 | <object class="IBObjectRecord"> | |||
|
2341 | <int key="objectID">416</int> | |||
|
2342 | <reference key="object" ref="188193463"/> | |||
|
2343 | <object class="NSMutableArray" key="children"> | |||
|
2344 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2345 | <reference ref="418410897"/> | |||
|
2346 | <reference ref="936733673"/> | |||
|
2347 | <reference ref="163417131"/> | |||
|
2348 | </object> | |||
|
2349 | <reference key="parent" ref="554641139"/> | |||
|
2350 | </object> | |||
|
2351 | <object class="IBObjectRecord"> | |||
|
2352 | <int key="objectID">417</int> | |||
|
2353 | <reference key="object" ref="418410897"/> | |||
|
2354 | <reference key="parent" ref="188193463"/> | |||
|
2355 | </object> | |||
|
2356 | <object class="IBObjectRecord"> | |||
|
2357 | <int key="objectID">418</int> | |||
|
2358 | <reference key="object" ref="936733673"/> | |||
|
2359 | <reference key="parent" ref="188193463"/> | |||
|
2360 | </object> | |||
|
2361 | <object class="IBObjectRecord"> | |||
|
2362 | <int key="objectID">419</int> | |||
|
2363 | <reference key="object" ref="163417131"/> | |||
|
2364 | <reference key="parent" ref="188193463"/> | |||
|
2365 | </object> | |||
|
2366 | <object class="IBObjectRecord"> | |||
|
2367 | <int key="objectID">406</int> | |||
|
2368 | <reference key="object" ref="764100755"/> | |||
|
2369 | <object class="NSMutableArray" key="children"> | |||
|
2370 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2371 | <reference ref="516244966"/> | |||
|
2372 | </object> | |||
|
2373 | <reference key="parent" ref="741760375"/> | |||
|
2374 | </object> | |||
|
2375 | <object class="IBObjectRecord"> | |||
|
2376 | <int key="objectID">407</int> | |||
|
2377 | <reference key="object" ref="516244966"/> | |||
|
2378 | <object class="NSMutableArray" key="children"> | |||
|
2379 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2380 | <reference ref="23853726"/> | |||
|
2381 | <reference ref="47103270"/> | |||
|
2382 | <reference ref="512953560"/> | |||
|
2383 | <reference ref="1048357090"/> | |||
|
2384 | </object> | |||
|
2385 | <reference key="parent" ref="764100755"/> | |||
|
2386 | </object> | |||
|
2387 | <object class="IBObjectRecord"> | |||
|
2388 | <int key="objectID">411</int> | |||
|
2389 | <reference key="object" ref="23853726"/> | |||
|
2390 | <object class="NSMutableArray" key="children"> | |||
|
2391 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2392 | <reference ref="857054683"/> | |||
|
2393 | <reference ref="920426212"/> | |||
|
2394 | </object> | |||
|
2395 | <reference key="parent" ref="516244966"/> | |||
|
2396 | </object> | |||
|
2397 | <object class="IBObjectRecord"> | |||
|
2398 | <int key="objectID">410</int> | |||
|
2399 | <reference key="object" ref="47103270"/> | |||
|
2400 | <reference key="parent" ref="516244966"/> | |||
|
2401 | </object> | |||
|
2402 | <object class="IBObjectRecord"> | |||
|
2403 | <int key="objectID">409</int> | |||
|
2404 | <reference key="object" ref="512953560"/> | |||
|
2405 | <reference key="parent" ref="516244966"/> | |||
|
2406 | </object> | |||
|
2407 | <object class="IBObjectRecord"> | |||
|
2408 | <int key="objectID">408</int> | |||
|
2409 | <reference key="object" ref="1048357090"/> | |||
|
2410 | <reference key="parent" ref="516244966"/> | |||
|
2411 | </object> | |||
|
2412 | <object class="IBObjectRecord"> | |||
|
2413 | <int key="objectID">413</int> | |||
|
2414 | <reference key="object" ref="857054683"/> | |||
|
2415 | <object class="NSMutableArray" key="children"> | |||
|
2416 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2417 | <reference ref="377147224"/> | |||
|
2418 | </object> | |||
|
2419 | <reference key="parent" ref="23853726"/> | |||
|
2420 | </object> | |||
|
2421 | <object class="IBObjectRecord"> | |||
|
2422 | <int key="objectID">412</int> | |||
|
2423 | <reference key="object" ref="920426212"/> | |||
|
2424 | <object class="NSMutableArray" key="children"> | |||
|
2425 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2426 | <reference ref="525071236"/> | |||
|
2427 | </object> | |||
|
2428 | <reference key="parent" ref="23853726"/> | |||
|
2429 | </object> | |||
|
2430 | <object class="IBObjectRecord"> | |||
|
2431 | <int key="objectID">415</int> | |||
|
2432 | <reference key="object" ref="525071236"/> | |||
|
2433 | <reference key="parent" ref="920426212"/> | |||
|
2434 | </object> | |||
|
2435 | <object class="IBObjectRecord"> | |||
|
2436 | <int key="objectID">414</int> | |||
|
2437 | <reference key="object" ref="377147224"/> | |||
|
2438 | <reference key="parent" ref="857054683"/> | |||
|
2439 | </object> | |||
|
2440 | <object class="IBObjectRecord"> | |||
|
2441 | <int key="objectID">422</int> | |||
|
2442 | <reference key="object" ref="631572152"/> | |||
|
2443 | <reference key="parent" ref="1049"/> | |||
|
2444 | </object> | |||
|
2445 | <object class="IBObjectRecord"> | |||
|
2446 | <int key="objectID">436</int> | |||
|
2447 | <reference key="object" ref="74807016"/> | |||
|
2448 | <reference key="parent" ref="439893737"/> | |||
|
2449 | </object> | |||
|
2450 | </object> | |||
|
2451 | </object> | |||
|
2452 | <object class="NSMutableDictionary" key="flattenedProperties"> | |||
|
2453 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2454 | <object class="NSMutableArray" key="dict.sortedKeys"> | |||
|
2455 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2456 | <string>-1.IBPluginDependency</string> | |||
|
2457 | <string>-2.IBPluginDependency</string> | |||
|
2458 | <string>-3.IBPluginDependency</string> | |||
|
2459 | <string>103.IBPluginDependency</string> | |||
|
2460 | <string>103.ImportedFromIB2</string> | |||
|
2461 | <string>106.IBPluginDependency</string> | |||
|
2462 | <string>106.ImportedFromIB2</string> | |||
|
2463 | <string>106.editorWindowContentRectSynchronizationRect</string> | |||
|
2464 | <string>111.IBPluginDependency</string> | |||
|
2465 | <string>111.ImportedFromIB2</string> | |||
|
2466 | <string>112.IBPluginDependency</string> | |||
|
2467 | <string>112.ImportedFromIB2</string> | |||
|
2468 | <string>124.IBPluginDependency</string> | |||
|
2469 | <string>124.ImportedFromIB2</string> | |||
|
2470 | <string>125.IBPluginDependency</string> | |||
|
2471 | <string>125.ImportedFromIB2</string> | |||
|
2472 | <string>125.editorWindowContentRectSynchronizationRect</string> | |||
|
2473 | <string>126.IBPluginDependency</string> | |||
|
2474 | <string>126.ImportedFromIB2</string> | |||
|
2475 | <string>129.IBPluginDependency</string> | |||
|
2476 | <string>129.ImportedFromIB2</string> | |||
|
2477 | <string>130.IBPluginDependency</string> | |||
|
2478 | <string>130.ImportedFromIB2</string> | |||
|
2479 | <string>130.editorWindowContentRectSynchronizationRect</string> | |||
|
2480 | <string>131.IBPluginDependency</string> | |||
|
2481 | <string>131.ImportedFromIB2</string> | |||
|
2482 | <string>134.IBPluginDependency</string> | |||
|
2483 | <string>134.ImportedFromIB2</string> | |||
|
2484 | <string>136.IBPluginDependency</string> | |||
|
2485 | <string>136.ImportedFromIB2</string> | |||
|
2486 | <string>143.IBPluginDependency</string> | |||
|
2487 | <string>143.ImportedFromIB2</string> | |||
|
2488 | <string>144.IBPluginDependency</string> | |||
|
2489 | <string>144.ImportedFromIB2</string> | |||
|
2490 | <string>145.IBPluginDependency</string> | |||
|
2491 | <string>145.ImportedFromIB2</string> | |||
|
2492 | <string>149.IBPluginDependency</string> | |||
|
2493 | <string>149.ImportedFromIB2</string> | |||
|
2494 | <string>150.IBPluginDependency</string> | |||
|
2495 | <string>150.ImportedFromIB2</string> | |||
|
2496 | <string>19.IBPluginDependency</string> | |||
|
2497 | <string>19.ImportedFromIB2</string> | |||
|
2498 | <string>195.IBPluginDependency</string> | |||
|
2499 | <string>195.ImportedFromIB2</string> | |||
|
2500 | <string>196.IBPluginDependency</string> | |||
|
2501 | <string>196.ImportedFromIB2</string> | |||
|
2502 | <string>197.IBPluginDependency</string> | |||
|
2503 | <string>197.ImportedFromIB2</string> | |||
|
2504 | <string>198.IBPluginDependency</string> | |||
|
2505 | <string>198.ImportedFromIB2</string> | |||
|
2506 | <string>199.IBPluginDependency</string> | |||
|
2507 | <string>199.ImportedFromIB2</string> | |||
|
2508 | <string>200.IBPluginDependency</string> | |||
|
2509 | <string>200.ImportedFromIB2</string> | |||
|
2510 | <string>200.editorWindowContentRectSynchronizationRect</string> | |||
|
2511 | <string>201.IBPluginDependency</string> | |||
|
2512 | <string>201.ImportedFromIB2</string> | |||
|
2513 | <string>202.IBPluginDependency</string> | |||
|
2514 | <string>202.ImportedFromIB2</string> | |||
|
2515 | <string>203.IBPluginDependency</string> | |||
|
2516 | <string>203.ImportedFromIB2</string> | |||
|
2517 | <string>204.IBPluginDependency</string> | |||
|
2518 | <string>204.ImportedFromIB2</string> | |||
|
2519 | <string>205.IBPluginDependency</string> | |||
|
2520 | <string>205.ImportedFromIB2</string> | |||
|
2521 | <string>205.editorWindowContentRectSynchronizationRect</string> | |||
|
2522 | <string>206.IBPluginDependency</string> | |||
|
2523 | <string>206.ImportedFromIB2</string> | |||
|
2524 | <string>207.IBPluginDependency</string> | |||
|
2525 | <string>207.ImportedFromIB2</string> | |||
|
2526 | <string>208.IBPluginDependency</string> | |||
|
2527 | <string>208.ImportedFromIB2</string> | |||
|
2528 | <string>209.IBPluginDependency</string> | |||
|
2529 | <string>209.ImportedFromIB2</string> | |||
|
2530 | <string>210.IBPluginDependency</string> | |||
|
2531 | <string>210.ImportedFromIB2</string> | |||
|
2532 | <string>211.IBPluginDependency</string> | |||
|
2533 | <string>211.ImportedFromIB2</string> | |||
|
2534 | <string>212.IBPluginDependency</string> | |||
|
2535 | <string>212.ImportedFromIB2</string> | |||
|
2536 | <string>212.editorWindowContentRectSynchronizationRect</string> | |||
|
2537 | <string>213.IBPluginDependency</string> | |||
|
2538 | <string>213.ImportedFromIB2</string> | |||
|
2539 | <string>214.IBPluginDependency</string> | |||
|
2540 | <string>214.ImportedFromIB2</string> | |||
|
2541 | <string>215.IBPluginDependency</string> | |||
|
2542 | <string>215.ImportedFromIB2</string> | |||
|
2543 | <string>216.IBPluginDependency</string> | |||
|
2544 | <string>216.ImportedFromIB2</string> | |||
|
2545 | <string>217.IBPluginDependency</string> | |||
|
2546 | <string>217.ImportedFromIB2</string> | |||
|
2547 | <string>218.IBPluginDependency</string> | |||
|
2548 | <string>218.ImportedFromIB2</string> | |||
|
2549 | <string>219.IBPluginDependency</string> | |||
|
2550 | <string>219.ImportedFromIB2</string> | |||
|
2551 | <string>220.IBPluginDependency</string> | |||
|
2552 | <string>220.ImportedFromIB2</string> | |||
|
2553 | <string>220.editorWindowContentRectSynchronizationRect</string> | |||
|
2554 | <string>221.IBPluginDependency</string> | |||
|
2555 | <string>221.ImportedFromIB2</string> | |||
|
2556 | <string>23.IBPluginDependency</string> | |||
|
2557 | <string>23.ImportedFromIB2</string> | |||
|
2558 | <string>236.IBPluginDependency</string> | |||
|
2559 | <string>236.ImportedFromIB2</string> | |||
|
2560 | <string>239.IBPluginDependency</string> | |||
|
2561 | <string>239.ImportedFromIB2</string> | |||
|
2562 | <string>24.IBPluginDependency</string> | |||
|
2563 | <string>24.ImportedFromIB2</string> | |||
|
2564 | <string>24.editorWindowContentRectSynchronizationRect</string> | |||
|
2565 | <string>29.IBPluginDependency</string> | |||
|
2566 | <string>29.ImportedFromIB2</string> | |||
|
2567 | <string>29.WindowOrigin</string> | |||
|
2568 | <string>29.editorWindowContentRectSynchronizationRect</string> | |||
|
2569 | <string>295.IBPluginDependency</string> | |||
|
2570 | <string>296.IBPluginDependency</string> | |||
|
2571 | <string>296.editorWindowContentRectSynchronizationRect</string> | |||
|
2572 | <string>297.IBPluginDependency</string> | |||
|
2573 | <string>298.IBPluginDependency</string> | |||
|
2574 | <string>299.IBPluginDependency</string> | |||
|
2575 | <string>300.IBPluginDependency</string> | |||
|
2576 | <string>300.editorWindowContentRectSynchronizationRect</string> | |||
|
2577 | <string>344.IBPluginDependency</string> | |||
|
2578 | <string>345.IBPluginDependency</string> | |||
|
2579 | <string>346.IBPluginDependency</string> | |||
|
2580 | <string>346.ImportedFromIB2</string> | |||
|
2581 | <string>348.IBPluginDependency</string> | |||
|
2582 | <string>348.ImportedFromIB2</string> | |||
|
2583 | <string>349.IBPluginDependency</string> | |||
|
2584 | <string>349.ImportedFromIB2</string> | |||
|
2585 | <string>349.editorWindowContentRectSynchronizationRect</string> | |||
|
2586 | <string>350.IBPluginDependency</string> | |||
|
2587 | <string>350.ImportedFromIB2</string> | |||
|
2588 | <string>351.IBPluginDependency</string> | |||
|
2589 | <string>351.ImportedFromIB2</string> | |||
|
2590 | <string>354.IBPluginDependency</string> | |||
|
2591 | <string>354.ImportedFromIB2</string> | |||
|
2592 | <string>371.IBPluginDependency</string> | |||
|
2593 | <string>371.IBViewEditorWindowController.showingLayoutRectangles</string> | |||
|
2594 | <string>371.IBWindowTemplateEditedContentRect</string> | |||
|
2595 | <string>371.NSWindowTemplate.visibleAtLaunch</string> | |||
|
2596 | <string>371.editorWindowContentRectSynchronizationRect</string> | |||
|
2597 | <string>372.IBPluginDependency</string> | |||
|
2598 | <string>373.IBPluginDependency</string> | |||
|
2599 | <string>385.IBPluginDependency</string> | |||
|
2600 | <string>407.IBPluginDependency</string> | |||
|
2601 | <string>409.IBPluginDependency</string> | |||
|
2602 | <string>410.IBPluginDependency</string> | |||
|
2603 | <string>411.IBPluginDependency</string> | |||
|
2604 | <string>412.IBPluginDependency</string> | |||
|
2605 | <string>413.IBPluginDependency</string> | |||
|
2606 | <string>414.IBPluginDependency</string> | |||
|
2607 | <string>415.IBPluginDependency</string> | |||
|
2608 | <string>416.IBPluginDependency</string> | |||
|
2609 | <string>417.IBPluginDependency</string> | |||
|
2610 | <string>418.IBPluginDependency</string> | |||
|
2611 | <string>419.IBAttributePlaceholdersKey</string> | |||
|
2612 | <string>419.IBPluginDependency</string> | |||
|
2613 | <string>422.IBPluginDependency</string> | |||
|
2614 | <string>436.IBPluginDependency</string> | |||
|
2615 | <string>5.IBPluginDependency</string> | |||
|
2616 | <string>5.ImportedFromIB2</string> | |||
|
2617 | <string>56.IBPluginDependency</string> | |||
|
2618 | <string>56.ImportedFromIB2</string> | |||
|
2619 | <string>57.IBPluginDependency</string> | |||
|
2620 | <string>57.ImportedFromIB2</string> | |||
|
2621 | <string>57.editorWindowContentRectSynchronizationRect</string> | |||
|
2622 | <string>58.IBPluginDependency</string> | |||
|
2623 | <string>58.ImportedFromIB2</string> | |||
|
2624 | <string>72.IBPluginDependency</string> | |||
|
2625 | <string>72.ImportedFromIB2</string> | |||
|
2626 | <string>73.IBPluginDependency</string> | |||
|
2627 | <string>73.ImportedFromIB2</string> | |||
|
2628 | <string>74.IBPluginDependency</string> | |||
|
2629 | <string>74.ImportedFromIB2</string> | |||
|
2630 | <string>75.IBPluginDependency</string> | |||
|
2631 | <string>75.ImportedFromIB2</string> | |||
|
2632 | <string>77.IBPluginDependency</string> | |||
|
2633 | <string>77.ImportedFromIB2</string> | |||
|
2634 | <string>78.IBPluginDependency</string> | |||
|
2635 | <string>78.ImportedFromIB2</string> | |||
|
2636 | <string>79.IBPluginDependency</string> | |||
|
2637 | <string>79.ImportedFromIB2</string> | |||
|
2638 | <string>80.IBPluginDependency</string> | |||
|
2639 | <string>80.ImportedFromIB2</string> | |||
|
2640 | <string>81.IBPluginDependency</string> | |||
|
2641 | <string>81.ImportedFromIB2</string> | |||
|
2642 | <string>81.editorWindowContentRectSynchronizationRect</string> | |||
|
2643 | <string>82.IBPluginDependency</string> | |||
|
2644 | <string>82.ImportedFromIB2</string> | |||
|
2645 | <string>83.IBPluginDependency</string> | |||
|
2646 | <string>83.ImportedFromIB2</string> | |||
|
2647 | <string>92.IBPluginDependency</string> | |||
|
2648 | <string>92.ImportedFromIB2</string> | |||
|
2649 | </object> | |||
|
2650 | <object class="NSMutableArray" key="dict.values"> | |||
|
2651 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2652 | <reference ref="113577022"/> | |||
|
2653 | <reference ref="885801228"/> | |||
|
2654 | <reference ref="885801228"/> | |||
|
2655 | <reference ref="113577022"/> | |||
|
2656 | <reference ref="9"/> | |||
|
2657 | <reference ref="113577022"/> | |||
|
2658 | <reference ref="9"/> | |||
|
2659 | <string>{{596, 852}, {216, 23}}</string> | |||
|
2660 | <reference ref="113577022"/> | |||
|
2661 | <reference ref="9"/> | |||
|
2662 | <reference ref="113577022"/> | |||
|
2663 | <reference ref="9"/> | |||
|
2664 | <reference ref="113577022"/> | |||
|
2665 | <reference ref="9"/> | |||
|
2666 | <reference ref="113577022"/> | |||
|
2667 | <reference ref="9"/> | |||
|
2668 | <string>{{522, 812}, {146, 23}}</string> | |||
|
2669 | <reference ref="113577022"/> | |||
|
2670 | <reference ref="9"/> | |||
|
2671 | <reference ref="113577022"/> | |||
|
2672 | <reference ref="9"/> | |||
|
2673 | <reference ref="113577022"/> | |||
|
2674 | <reference ref="9"/> | |||
|
2675 | <string>{{436, 809}, {64, 6}}</string> | |||
|
2676 | <reference ref="113577022"/> | |||
|
2677 | <reference ref="9"/> | |||
|
2678 | <reference ref="113577022"/> | |||
|
2679 | <reference ref="9"/> | |||
|
2680 | <reference ref="113577022"/> | |||
|
2681 | <reference ref="9"/> | |||
|
2682 | <reference ref="113577022"/> | |||
|
2683 | <reference ref="9"/> | |||
|
2684 | <reference ref="113577022"/> | |||
|
2685 | <reference ref="9"/> | |||
|
2686 | <reference ref="113577022"/> | |||
|
2687 | <reference ref="9"/> | |||
|
2688 | <reference ref="113577022"/> | |||
|
2689 | <reference ref="9"/> | |||
|
2690 | <reference ref="113577022"/> | |||
|
2691 | <reference ref="9"/> | |||
|
2692 | <reference ref="113577022"/> | |||
|
2693 | <reference ref="9"/> | |||
|
2694 | <reference ref="113577022"/> | |||
|
2695 | <reference ref="9"/> | |||
|
2696 | <reference ref="113577022"/> | |||
|
2697 | <reference ref="9"/> | |||
|
2698 | <reference ref="113577022"/> | |||
|
2699 | <reference ref="9"/> | |||
|
2700 | <reference ref="113577022"/> | |||
|
2701 | <reference ref="9"/> | |||
|
2702 | <reference ref="113577022"/> | |||
|
2703 | <reference ref="9"/> | |||
|
2704 | <reference ref="113577022"/> | |||
|
2705 | <reference ref="9"/> | |||
|
2706 | <string>{{608, 612}, {275, 83}}</string> | |||
|
2707 | <reference ref="113577022"/> | |||
|
2708 | <reference ref="9"/> | |||
|
2709 | <reference ref="113577022"/> | |||
|
2710 | <reference ref="9"/> | |||
|
2711 | <reference ref="113577022"/> | |||
|
2712 | <reference ref="9"/> | |||
|
2713 | <reference ref="113577022"/> | |||
|
2714 | <reference ref="9"/> | |||
|
2715 | <reference ref="113577022"/> | |||
|
2716 | <reference ref="9"/> | |||
|
2717 | <string>{{365, 632}, {243, 243}}</string> | |||
|
2718 | <reference ref="113577022"/> | |||
|
2719 | <reference ref="9"/> | |||
|
2720 | <reference ref="113577022"/> | |||
|
2721 | <reference ref="9"/> | |||
|
2722 | <reference ref="113577022"/> | |||
|
2723 | <reference ref="9"/> | |||
|
2724 | <reference ref="113577022"/> | |||
|
2725 | <reference ref="9"/> | |||
|
2726 | <reference ref="113577022"/> | |||
|
2727 | <reference ref="9"/> | |||
|
2728 | <reference ref="113577022"/> | |||
|
2729 | <reference ref="9"/> | |||
|
2730 | <reference ref="113577022"/> | |||
|
2731 | <reference ref="9"/> | |||
|
2732 | <string>{{608, 612}, {167, 43}}</string> | |||
|
2733 | <reference ref="113577022"/> | |||
|
2734 | <reference ref="9"/> | |||
|
2735 | <reference ref="113577022"/> | |||
|
2736 | <reference ref="9"/> | |||
|
2737 | <reference ref="113577022"/> | |||
|
2738 | <reference ref="9"/> | |||
|
2739 | <reference ref="113577022"/> | |||
|
2740 | <reference ref="9"/> | |||
|
2741 | <reference ref="113577022"/> | |||
|
2742 | <reference ref="9"/> | |||
|
2743 | <reference ref="113577022"/> | |||
|
2744 | <reference ref="9"/> | |||
|
2745 | <reference ref="113577022"/> | |||
|
2746 | <reference ref="9"/> | |||
|
2747 | <reference ref="113577022"/> | |||
|
2748 | <reference ref="9"/> | |||
|
2749 | <string>{{608, 612}, {241, 103}}</string> | |||
|
2750 | <reference ref="113577022"/> | |||
|
2751 | <reference ref="9"/> | |||
|
2752 | <reference ref="113577022"/> | |||
|
2753 | <reference ref="9"/> | |||
|
2754 | <reference ref="113577022"/> | |||
|
2755 | <reference ref="9"/> | |||
|
2756 | <reference ref="113577022"/> | |||
|
2757 | <reference ref="9"/> | |||
|
2758 | <reference ref="113577022"/> | |||
|
2759 | <reference ref="9"/> | |||
|
2760 | <string>{{525, 802}, {197, 73}}</string> | |||
|
2761 | <reference ref="113577022"/> | |||
|
2762 | <reference ref="9"/> | |||
|
2763 | <string>{74, 862}</string> | |||
|
2764 | <string>{{11, 736}, {489, 20}}</string> | |||
|
2765 | <reference ref="113577022"/> | |||
|
2766 | <reference ref="113577022"/> | |||
|
2767 | <string>{{475, 832}, {234, 43}}</string> | |||
|
2768 | <reference ref="113577022"/> | |||
|
2769 | <reference ref="113577022"/> | |||
|
2770 | <reference ref="113577022"/> | |||
|
2771 | <reference ref="113577022"/> | |||
|
2772 | <string>{{409, 832}, {176, 43}}</string> | |||
|
2773 | <reference ref="113577022"/> | |||
|
2774 | <reference ref="113577022"/> | |||
|
2775 | <reference ref="113577022"/> | |||
|
2776 | <reference ref="9"/> | |||
|
2777 | <reference ref="113577022"/> | |||
|
2778 | <reference ref="9"/> | |||
|
2779 | <reference ref="113577022"/> | |||
|
2780 | <reference ref="9"/> | |||
|
2781 | <string>{{608, 612}, {215, 63}}</string> | |||
|
2782 | <reference ref="113577022"/> | |||
|
2783 | <reference ref="9"/> | |||
|
2784 | <reference ref="113577022"/> | |||
|
2785 | <reference ref="9"/> | |||
|
2786 | <reference ref="113577022"/> | |||
|
2787 | <reference ref="9"/> | |||
|
2788 | <reference ref="113577022"/> | |||
|
2789 | <integer value="0"/> | |||
|
2790 | <string>{{108, 368}, {725, 337}}</string> | |||
|
2791 | <reference ref="9"/> | |||
|
2792 | <string>{{108, 368}, {725, 337}}</string> | |||
|
2793 | <reference ref="113577022"/> | |||
|
2794 | <reference ref="113577022"/> | |||
|
2795 | <reference ref="113577022"/> | |||
|
2796 | <reference ref="113577022"/> | |||
|
2797 | <reference ref="113577022"/> | |||
|
2798 | <reference ref="113577022"/> | |||
|
2799 | <reference ref="113577022"/> | |||
|
2800 | <reference ref="113577022"/> | |||
|
2801 | <reference ref="113577022"/> | |||
|
2802 | <reference ref="113577022"/> | |||
|
2803 | <reference ref="113577022"/> | |||
|
2804 | <reference ref="113577022"/> | |||
|
2805 | <reference ref="113577022"/> | |||
|
2806 | <reference ref="113577022"/> | |||
|
2807 | <object class="NSMutableDictionary"> | |||
|
2808 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2809 | <object class="NSArray" key="dict.sortedKeys"> | |||
|
2810 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2811 | </object> | |||
|
2812 | <object class="NSMutableArray" key="dict.values"> | |||
|
2813 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2814 | </object> | |||
|
2815 | </object> | |||
|
2816 | <reference ref="113577022"/> | |||
|
2817 | <reference ref="113577022"/> | |||
|
2818 | <reference ref="113577022"/> | |||
|
2819 | <reference ref="113577022"/> | |||
|
2820 | <reference ref="9"/> | |||
|
2821 | <reference ref="113577022"/> | |||
|
2822 | <reference ref="9"/> | |||
|
2823 | <reference ref="113577022"/> | |||
|
2824 | <reference ref="9"/> | |||
|
2825 | <string>{{23, 794}, {245, 183}}</string> | |||
|
2826 | <reference ref="113577022"/> | |||
|
2827 | <reference ref="9"/> | |||
|
2828 | <reference ref="113577022"/> | |||
|
2829 | <reference ref="9"/> | |||
|
2830 | <reference ref="113577022"/> | |||
|
2831 | <reference ref="9"/> | |||
|
2832 | <reference ref="113577022"/> | |||
|
2833 | <reference ref="9"/> | |||
|
2834 | <reference ref="113577022"/> | |||
|
2835 | <reference ref="9"/> | |||
|
2836 | <reference ref="113577022"/> | |||
|
2837 | <reference ref="9"/> | |||
|
2838 | <reference ref="113577022"/> | |||
|
2839 | <reference ref="9"/> | |||
|
2840 | <reference ref="113577022"/> | |||
|
2841 | <reference ref="9"/> | |||
|
2842 | <reference ref="113577022"/> | |||
|
2843 | <reference ref="9"/> | |||
|
2844 | <reference ref="113577022"/> | |||
|
2845 | <reference ref="9"/> | |||
|
2846 | <string>{{323, 672}, {199, 203}}</string> | |||
|
2847 | <reference ref="113577022"/> | |||
|
2848 | <reference ref="9"/> | |||
|
2849 | <reference ref="113577022"/> | |||
|
2850 | <reference ref="9"/> | |||
|
2851 | <reference ref="113577022"/> | |||
|
2852 | <reference ref="9"/> | |||
|
2853 | </object> | |||
|
2854 | </object> | |||
|
2855 | <object class="NSMutableDictionary" key="unlocalizedProperties"> | |||
|
2856 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2857 | <object class="NSArray" key="dict.sortedKeys"> | |||
|
2858 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2859 | </object> | |||
|
2860 | <object class="NSMutableArray" key="dict.values"> | |||
|
2861 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2862 | </object> | |||
|
2863 | </object> | |||
|
2864 | <nil key="activeLocalization"/> | |||
|
2865 | <object class="NSMutableDictionary" key="localizations"> | |||
|
2866 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2867 | <object class="NSArray" key="dict.sortedKeys"> | |||
|
2868 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2869 | </object> | |||
|
2870 | <object class="NSMutableArray" key="dict.values"> | |||
|
2871 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2872 | </object> | |||
|
2873 | </object> | |||
|
2874 | <nil key="sourceID"/> | |||
|
2875 | <int key="maxID">445</int> | |||
|
2876 | </object> | |||
|
2877 | <object class="IBClassDescriber" key="IBDocument.Classes"> | |||
|
2878 | <object class="NSMutableArray" key="referencedPartialClassDescriptions"> | |||
|
2879 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2880 | <object class="IBPartialClassDescription"> | |||
|
2881 | <string key="className">IPython1SandboxAppDelegate</string> | |||
|
2882 | <string key="superclassName">NSObject</string> | |||
|
2883 | <object class="NSMutableDictionary" key="actions"> | |||
|
2884 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2885 | <object class="NSArray" key="dict.sortedKeys"> | |||
|
2886 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2887 | </object> | |||
|
2888 | <object class="NSMutableArray" key="dict.values"> | |||
|
2889 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2890 | </object> | |||
|
2891 | </object> | |||
|
2892 | <object class="NSMutableDictionary" key="outlets"> | |||
|
2893 | <string key="NS.key.0">ipythonController</string> | |||
|
2894 | <string key="NS.object.0">id</string> | |||
|
2895 | </object> | |||
|
2896 | <object class="IBClassDescriptionSource" key="sourceIdentifier"> | |||
|
2897 | <string key="majorKey">IBProjectSource</string> | |||
|
2898 | <string key="minorKey">IPython1SandboxAppDelegate.py</string> | |||
|
2899 | </object> | |||
|
2900 | </object> | |||
|
2901 | <object class="IBPartialClassDescription"> | |||
|
2902 | <reference key="className" ref="695797635"/> | |||
|
2903 | <nil key="superclassName"/> | |||
|
2904 | <object class="NSMutableDictionary" key="actions"> | |||
|
2905 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2906 | <object class="NSArray" key="dict.sortedKeys"> | |||
|
2907 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2908 | </object> | |||
|
2909 | <object class="NSMutableArray" key="dict.values"> | |||
|
2910 | <bool key="EncodedWithXMLCoder">YES</bool> | |||
|
2911 | </object> | |||
|
2912 | </object> | |||
|
2913 | <object class="NSMutableDictionary" key="outlets"> | |||
|
2914 | <reference key="NS.key.0" ref="684042788"/> | |||
|
2915 | <string key="NS.object.0">NSTextView</string> | |||
|
2916 | </object> | |||
|
2917 | <object class="IBClassDescriptionSource" key="sourceIdentifier"> | |||
|
2918 | <string key="majorKey">IBUserSource</string> | |||
|
2919 | <reference key="minorKey" ref="255189770"/> | |||
|
2920 | </object> | |||
|
2921 | </object> | |||
|
2922 | </object> | |||
|
2923 | </object> | |||
|
2924 | <int key="IBDocument.localizationMode">0</int> | |||
|
2925 | <string key="IBDocument.LastKnownRelativeProjectPath">../../IPython1Sandbox.xcodeproj</string> | |||
|
2926 | <int key="IBDocument.defaultPropertyAccessControl">3</int> | |||
|
2927 | <object class="NSMutableData" key="IBDocument.RunnableNib"> | |||
|
2928 | <bytes key="NS.bytes">YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA | |||
|
2929 | AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEC/gALAAwAMQA1ADYAPAA9 | |||
|
2930 | AEIAWABZAFoAWwALAGgAbQB7AIAAlQCZAKAApAC0ALoAzQDRAOYA+gD7APwA/QD+AP8BAAEBAQIBAwEE | |||
|
2931 | AQUBBgEHAQgBCQEKAQsBDwEQARkBIQEmASoBLQExATUBOQE7AT0BTQFSAVUBWgFBAVQBYwFqAWsBbAFv | |||
|
2932 | AXQBdQF4AYAAkAGBAYQBhwGIAYkBjgGPAZABkwGYAZkBmwGeAasBrAGtAbEBvAG9Ab4BwQHCAcQBxQHG | |||
|
2933 | AdIB0wHbAdwB3wHkAeUB6AHtAfAB/AIAAgcCCwIdAiUCLwIzAlECUgJaAmQCZQJoAm4CbwJyAncCiAKP | |||
|
2934 | ApACkwKYApkCnAKmAqcCrAKxArICtwK4ArsCwwLJAsoC0QLWAtcC2gLcAt0C5gLnAvAC8QL1AvYC9wL4 | |||
|
2935 | AvkC/wMAAwIDAwMEAwcDFgMYAxsDHAMfAAsDIAMhAyIDJQNXA10DbgNzA3QDdQN6A3sDfAN/A4MDhAOH | |||
|
2936 | A4gDjAOQA5cDmwOcA50DngOiA6kDqgOrA6wDsAO3A7sDvAO9A74DwgPJA80DzgPPA9AD1APcA90D3gPf | |||
|
2937 | A+MD6wPwA/ED8gPzA/cD/gQCBAMEBAQFBAkEEAQRBBIEEwQXBB4EHwQgBCQEKwQvASkEMAQxBDcEOgQ7 | |||
|
2938 | BDwEPwRDBEoESwRMBFAEVwRcBF0EXgRfBGMEagRrBGwEcAR3BHgEeQR9BIQEhQSGBIcEjASTBJQElQSZ | |||
|
2939 | BKAEpASlBKYEpwSrBLIEswS0BLUEuQTABMEEwgTGBM0EzgTPBNME2gTbBNwE3QThBOgE6QTqBOsE7wT2 | |||
|
2940 | BPcE+AT5BP0FBAUFBQYFBwUMBQ8FEAURBRUFHAUdBR4FIgUpBSoFKwUsBTAFNwU7BTwFPQU+BUMFRgVK | |||
|
2941 | BVEFUgVTBVcFXgViBWMFZAVlBWkFcAV1BXYFdwV7BYIFgwWEBYgFjwWQBZEFkgWXBZgFnQWeBaIFqwWs | |||
|
2942 | Ba0FrgWyBbkFugW7BbwFwAXHBcgFyQXNBdQF1QXWBeAF9gX8Bf0F/gX/BgMGCwYMBg8GEQYXBhgGGQYc | |||
|
2943 | BiMGJAYlBiYGLQYuBi8GNgY3BjgGOQZABkEGQgZDBq0Gtwa4BrkGvgbABskGuAbKBs4GzwbYBrgG2Qbf | |||
|
2944 | BuQG5QbvBvgGuAb5BwcHEgcZBxoHGwckBy0GuAcuBzMHNgc3B0AHSQdKB1MGuAdUB2IHaQdqB2sHcgdz | |||
|
2945 | B3QHfQeGB48GuAeQB6AHqQeyB7sGuAe8B8QHywfMB9MH1AfcB90H3gfnBrgH6AfvB/gGuAf5B/4IBQgG | |||
|
2946 | CA8GuAgQCBUIHga4CB8IJggvCDAIOQa4CDoIPgg/CKkJFAl/CYAJgQmCCYMJhAmFCYYJhwmICYkJigmL | |||
|
2947 | CYwJjQmOCY8JkAmRCZIJkwmUCZUJlgmXCZgJmQmaCZsJnAmdCZ4JnwmgCaEJogmjCaQJpQmmCacJqAmp | |||
|
2948 | CaoJqwmsCa0JrgmvCbAJsQmyCbMJtAm1CbYJtwm4CbkJugm7CbwJvQm+Cb8JwAnBCcIJwwnECcUJxgnH | |||
|
2949 | CcgJyQnKCcsJzAnNCc4JzwnQCdEJ0gnTCdQJ1QnWCdcJ2AnZCdoJ2wncCd0J3gnfCeAJ4QniCeMJ5Anl | |||
|
2950 | CeYJ6QnsCoYLIAshCyILIwskCyULJgsnCygLKQsqCysLLAstCy4LLwswCzELMgszCzQLNQs2CzcLOAs5 | |||
|
2951 | CzoLOws8Cz0LPgs/C0ALQQtCC0MLRAtFC0YLRwtIC0kLSgtLC0wLTQtOC08LUAtRC1ILUwtUC1ULVgtX | |||
|
2952 | C1gLWQtaC1sLXAtdC14LXwtgC2ELYgtjC2QLZQtmC2cLaAtpC2oLawtsC20LbgtvC3ALcQtyC3MLdAt1 | |||
|
2953 | C3YLdwt4C3kLegt7C3wLfQt+C38LgAuBC4ILgwuEC4ULhguHC4gLiQuKC4sLjAuNC44LjwuQC5ELkguT | |||
|
2954 | C5QLlQuWC5cLmAuZC5oLmwucC50LngufC6ALoQuiC6MLpAulC6YLpwuoC6kLqgurC6wLrQuuC68LsAux | |||
|
2955 | C7ILswu0C7ULtgu3C7oLvQvAVSRudWxs3xASAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwA | |||
|
2956 | HQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwVk5TUm9vdFYkY2xhc3NdTlNPYmpl | |||
|
2957 | Y3RzS2V5c18QD05TQ2xhc3Nlc1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eU9pZHNWYWx1ZXNdTlNDb25u | |||
|
2958 | ZWN0aW9uc1tOU05hbWVzS2V5c1tOU0ZyYW1ld29ya11OU0NsYXNzZXNLZXlzWk5TT2lkc0tleXNdTlNO | |||
|
2959 | YW1lc1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eUNvbm5lY3RvcnNdTlNGb250TWFuYWdlcl8QEE5TVmlz | |||
|
2960 | aWJsZVdpbmRvd3NfEA9OU09iamVjdHNWYWx1ZXNfEBdOU0FjY2Vzc2liaWxpdHlPaWRzS2V5c1lOU05l | |||
|
2961 | eHRPaWRcTlNPaWRzVmFsdWVzgAKBAv2BAZuBAmCBAvyArYEB9oAFgQJfgQJhgQH3gQL6gACABoEB9YEC | |||
|
2962 | +xEBv4ECYtIADgAyADMANFtOU0NsYXNzTmFtZYAEgANdTlNBcHBsaWNhdGlvbtIANwA4ADkAOlgkY2xh | |||
|
2963 | c3Nlc1okY2xhc3NuYW1logA6ADteTlNDdXN0b21PYmplY3RYTlNPYmplY3RfEBBJQkNvY29hRnJhbWV3 | |||
|
2964 | b3Jr0gAOAD4APwBAWk5TLm9iamVjdHOAK6EAQYAH2wBDAA4ARABFAEYARwBIAEkASgBLAEwATQBOAE8A | |||
|
2965 | UABRAFIAUwBUAFUAVgArXE5TV2luZG93Vmlld1xOU1NjcmVlblJlY3RfEBNOU0ZyYW1lQXV0b3NhdmVO | |||
|
2966 | YW1lXU5TV2luZG93VGl0bGVZTlNXVEZsYWdzXU5TV2luZG93Q2xhc3NcTlNXaW5kb3dSZWN0XxAPTlNX | |||
|
2967 | aW5kb3dCYWNraW5nXxARTlNXaW5kb3dTdHlsZU1hc2tbTlNWaWV3Q2xhc3OAC4CsgKqAq4AJEnQAAACA | |||
|
2968 | CoAIEAIQD4AAXxAYe3szMzUsIDQxM30sIHs3MjUsIDMzN319XxAQSVB5dGhvbjEgKENvY29hKVhOU1dp | |||
|
2969 | bmRvd9cAXAAOAF0AXgBfAFoAYABhAGIAYwBkAGUAYQBnXxAPTlNOZXh0UmVzcG9uZGVyWk5TU3Vidmll | |||
|
2970 | d3NYTlN2RmxhZ3NbTlNGcmFtZVNpemVbTlNTdXBlcnZpZXeADIBdgA0RAQCAqIAMgKnSAA4APgBpAGqA | |||
|
2971 | NKIAawBsgA6Ao9oAXAAOAG4AXQBeAG8AcABaAGAAcQBNAHMAdAB1AHYAdwBVAGEATQB6V05TRnJhbWVe | |||
|
2972 | TlNBdXRvc2F2ZU5hbWVeTlNEaXZpZGVyU3R5bGVcTlNJc1ZlcnRpY2FsgAuAooCggA8RARKAoYAMgAsJ | |||
|
2973 | 0gAOAD4AaQB9gDSiAH4Af4AQgGreAFwAgQAOAIIAgwBdAF4AXwCEAFoAhQCGAGAAhwBrAIkAigCLAIwA | |||
|
2974 | jQCOAI8AkABhAJIAVQBrAJRZTlNCb3hUeXBlW05TVGl0bGVDZWxsXU5TVHJhbnNwYXJlbnRcTlNCb3Jk | |||
|
2975 | ZXJUeXBlWU5TT2Zmc2V0c18QD05TVGl0bGVQb3NpdGlvbl1OU0NvbnRlbnRWaWV3gA4QAIBpgGAIgBEQ | |||
|
2976 | FoBeEAGADIBfgA6AEtIADgA+AGkAl4A0oQCUgBLXAFwADgBuAF0AXgBaAGAAfgBiAJwAnQBkAGEAfoAQ | |||
|
2977 | gF2AXIATgAyAENIADgA+AGkAooA0oQCjgBTcAFwApQAOAG4ApgBdAF4AWgBgAKcAqACHAJQAqgCrAKwA | |||
|
2978 | rQCuAHYAYQCUALEAsgCyW05TSFNjcm9sbGVyWE5Tc0ZsYWdzW05TVlNjcm9sbGVyXU5TTmV4dEtleVZp | |||
|
2979 | ZXeAEoBYgFuAWhECEoAVgAyAEoBUgBaAFtIADgA+AGkAtoA0owCyALEAqoAWgFSAWN0AXAAOAG4AuwC8 | |||
|
2980 | AL0AXQBeAL4AWgC/AGAAqACjAMEAwgDDAMQAxQDGAMcAyABhAMoAowDIWE5TQm91bmRzWE5TQ3Vyc29y | |||
|
2981 | WU5TY3ZGbGFnc1lOU0RvY1ZpZXdZTlNCR0NvbG9ygBSAU4BNgE6AUBAEgBcRCQCAGIAMgE+AFIAY0gAO | |||
|
2982 | AD4AaQDPgDShAMiAGN0AXAAOAG4A0gDTANQA1QBeANYAWgDXAGAA2ACyANoA2wDcAN0A3gDfAOAA4QBh | |||
|
2983 | AOMAsgArXxAPTlNUZXh0Q29udGFpbmVyWU5TVFZGbGFnc1xOU1NoYXJlZERhdGFbTlNEcmFnVHlwZXNZ | |||
|
2984 | TlNNYXhTaXplWE5TTWluaXplWk5TRGVsZWdhdGWAFoBMgCyALRAGgDeAGREJEoBKgAyAS4AWgADSAA4A | |||
|
2985 | PgA/AOiAK68QEQDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APmAGoAbgByAHYAegB+AIIAh | |||
|
2986 | gCKAI4AkgCWAJoAngCiAKYAqXxAZTmVYVCBSVEZEIHBhc3RlYm9hcmQgdHlwZV8QEk5TU3RyaW5nUGJv | |||
|
2987 | YXJkVHlwZV8QGk5lWFQgcnVsZXIgcGFzdGVib2FyZCB0eXBlXxAeTmVYVCBUSUZGIHY0LjAgcGFzdGVi | |||
|
2988 | b2FyZCB0eXBlXxAZQXBwbGUgVVJMIHBhc3RlYm9hcmQgdHlwZV8QI0NvcmVQYXN0ZWJvYXJkRmxhdm9y | |||
|
2989 | VHlwZSAweDZENkY2Rjc2XxAjQ29yZVBhc3RlYm9hcmRGbGF2b3JUeXBlIDB4NzU3MjZDMjBfEBtXZWJV | |||
|
2990 | UkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVfEBlBcHBsZSBQREYgcGFzdGVib2FyZCB0eXBlXxAZQXBwbGUg | |||
|
2991 | UE5HIHBhc3RlYm9hcmQgdHlwZV8QGkFwcGxlIEhUTUwgcGFzdGVib2FyZCB0eXBlXxAVTlNGaWxlbmFt | |||
|
2992 | ZXNQYm9hcmRUeXBlXxAXTlNDb2xvciBwYXN0ZWJvYXJkIHR5cGVfEDFOZVhUIEVuY2Fwc3VsYXRlZCBQ | |||
|
2993 | b3N0U2NyaXB0IHYxLjIgcGFzdGVib2FyZCB0eXBlXxAaQXBwbGUgUElDVCBwYXN0ZWJvYXJkIHR5cGVf | |||
|
2994 | EBlOZVhUIGZvbnQgcGFzdGVib2FyZCB0eXBlXxAqTmVYVCBSaWNoIFRleHQgRm9ybWF0IHYxLjAgcGFz | |||
|
2995 | dGVib2FyZCB0eXBl0gA3ADgBDAENowENAQ4AO1xOU011dGFibGVTZXRVTlNTZXRfEBR7ezAsIDM4fSwg | |||
|
2996 | ezQzMywgMTR9fdUBEQAOARIBEwEUAJABFQDIARcBGFlOU1RDRmxhZ3NaTlNUZXh0Vmlld1dOU1dpZHRo | |||
|
2997 | XxAPTlNMYXlvdXRNYW5hZ2VygDaAGCNAexAAAAAAAIAu1QAOARoBGwEcANgBHQEeAR8A3QArXxAQTlNU | |||
|
2998 | ZXh0Q29udGFpbmVyc11OU1RleHRTdG9yYWdlWU5TTE1GbGFnc4A1gDOAL4AA0wAOASIA2AEjASQAK1hO | |||
|
2999 | U1N0cmluZ4AygDCAANIADgEnASgBKVlOUy5zdHJpbmeAMVDSADcAOAErASyjASwBIgA7XxAPTlNNdXRh | |||
|
3000 | YmxlU3RyaW5n0gA3ADgBLgEbpAEbAS8BMAA7XxAZTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZ18QEk5T | |||
|
3001 | QXR0cmlidXRlZFN0cmluZ9IADgA+AGkBM4A0oQDcgC3SADcAOAE2ATejATcBOAA7Xk5TTXV0YWJsZUFy | |||
|
3002 | cmF5V05TQXJyYXnSADcAOAE6ARSiARQAO9IANwA4ATwA0qIA0gA72AAOAT4BPwFAAUEBQgFDAUQBRQFG | |||
|
3003 | ACsBSAFJAUoAKwFMV05TRmxhZ3NfEBdOU0RlZmF1bHRQYXJhZ3JhcGhTdHlsZV8QEE5TSW5zZXJ0aW9u | |||
|
3004 | Q29sb3JfEBFOU0JhY2tncm91bmRDb2xvcl8QFE5TU2VsZWN0ZWRBdHRyaWJ1dGVzXxASTlNNYXJrZWRB | |||
|
3005 | dHRyaWJ1dGVzXxAQTlNMaW5rQXR0cmlidXRlc4BJEgAFS2+AAIA6gDiAO4AAgEXTAA4BTgFPAVAAVQFR | |||
|
3006 | XE5TQ29sb3JTcGFjZVVOU1JHQoA5TxAYMSAwLjk1Mjk0MTI0IDAuODUwOTgwNDYA0gA3ADgBUwFUogFU | |||
|
3007 | ADtXTlNDb2xvctMADgFOAVYBUAFYAVlXTlNXaGl0ZYA5EANCMADTAA4BWwA+AVwBXQFgV05TLmtleXOA | |||
|
3008 | RKIBXgFfgDyAPaIBYQFigD6AQtUADgFUAU4BZAFlAVABZwDdAWgBaVtOU0NvbG9yTmFtZV1OU0NhdGFs | |||
|
3009 | b2dOYW1lgDmAQYBAgD9WU3lzdGVtXxAbc2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9y0wAOAU4BVgFQ | |||
|
3010 | AVgBboA5SzAuNjY2NjY2NjkA1QAOAVQBTgFkAWUBUAFIAN0BcgFpgDmAOoBDgD9fEBFzZWxlY3RlZFRl | |||
|
3011 | eHRDb2xvctIANwA4AXYBd6IBdwA7XE5TRGljdGlvbmFyedMADgFbAD4BXAF6AX2ARKIBewFfgEaAPaIB | |||
|
3012 | fgF/gEeASFtOU1VuZGVybGluZdMADgFOAU8BUACQAYOAOUYwIDAgMQDSADcAOAGFAYaiAYYAO18QFE5T | |||
|
3013 | VGV4dFZpZXdTaGFyZWREYXRhXHs0ODAsIDFlKzA3fVd7ODQsIDB90gA3ADgBigESpQESAYsBjAGNADtW | |||
|
3014 | TlNUZXh0Vk5TVmlld1tOU1Jlc3BvbmRlcl8QFHt7MSwgMX0sIHs0MzMsIDIzMX19XxAVe3swLCAzOH0s | |||
|
3015 | IHs0MzMsIDIzMX190wAOAU4BVgFQAVgBkoA5QjEA0wAOAZQBlQGWAZcAkFlOU0hvdFNwb3RcTlNDdXJz | |||
|
3016 | b3JUeXBlgFKAUVd7NCwgLTV90gA3ADgBmgC8ogC8ADvSADcAOAGcAZ2kAZ0BjAGNADtaTlNDbGlwVmll | |||
|
3017 | d9kAXAGfAA4AbgBeAFoBoABgAaEAowCjAaQBpQGmAGEBqACjAapYTlNUYXJnZXRYTlNBY3Rpb25ZTlNQ | |||
|
3018 | ZXJjZW50gBSAFIBXgFUT/////4AAAQCADIBWgBQjP9Ww0wAAAABfEBV7ezQyNywgMX0sIHsxNSwgMjYz | |||
|
3019 | fX1cX2RvU2Nyb2xsZXI60gA3ADgBrgGvpQGvAbABjAGNADtaTlNTY3JvbGxlcllOU0NvbnRyb2zbAFwB | |||
|
3020 | nwAOAG4ApgBeAFoBoABgAbIBoQCjAKMBpAG2AJAAZABhAagAowG6AbtaTlNDdXJWYWx1ZYAUgBSAV4BZ | |||
|
3021 | gAyAVoAUIz/wAAAAAAAAIz/uQshgAAAAXxAYe3stMTAwLCAtMTAwfSwgezg3LCAxOH19XxAWe3sxOCwg | |||
|
3022 | MTR9LCB7NDM1LCAyMzN9fdIANwA4Ab8BwKQBwAGMAY0AO1xOU1Njcm9sbFZpZXdfEBR7ezEsIDF9LCB7 | |||
|
3023 | NDcxLCAyNTd9fdIANwA4AcMBjKMBjAGNADtaezQ3MywgMjczfVZ7MCwgMH3XAccADgFBAcgByQHKAcsB | |||
|
3024 | zAHNAc4BzwHQAIkB0VtOU0NlbGxGbGFnc1pOU0NvbnRlbnRzWU5TU3VwcG9ydFxOU0NlbGxGbGFnczJb | |||
|
3025 | TlNUZXh0Q29sb3ISBAH+AIBogGWAYYBigGdXQ29uc29sZdQADgHUAdUB1gHXAdgB2QHaVk5TU2l6ZVZO | |||
|
3026 | U05hbWVYTlNmRmxhZ3OAZCNAJgAAAAAAAIBjEQwcXEx1Y2lkYUdyYW5kZdIANwA4Ad0B3qIB3gA7Vk5T | |||
|
3027 | Rm9udNUADgFUAU4BZAFlAVAAygDdAeIBaYA5gE+AZoA/XxATdGV4dEJhY2tncm91bmRDb2xvctMADgFO | |||
|
3028 | AVYBUAFYAeeAOU0wIDAuODAwMDAwMDEA0gA3ADgB6QHqpAHqAesB7AA7XxAPTlNUZXh0RmllbGRDZWxs | |||
|
3029 | XE5TQWN0aW9uQ2VsbFZOU0NlbGzSADcAOAHuAe+kAe8BjAGNADtVTlNCb3jeAFwAgQAOAIIAbgCDAF0A | |||
|
3030 | XgCEAFoAhQCGAGAAhwBrAIkAigHzAfQAjAH2AfcAkABhAJIAVQBrAfuADoBpgJ2AnAiAaxAzgAyAX4AO | |||
|
3031 | gGzSAA4APgBpAf6ANKEB+4Bs1wBcAA4AbgBdAF4AWgBgAH8AYgIDAgQAZABhAH+AaoBdgJuAbYAMgGrS | |||
|
3032 | AA4APgBpAgmANKECCoBu3xAPAFwApQAOAG4ApgIMAg0AXQIOAF4AWgBgAKcAqACHAfsCEACrAhICEwIU | |||
|
3033 | AhUCFgIXAHYAYQH7AhoCGwIbXE5TQ29ybmVyVmlld18QEE5TSGVhZGVyQ2xpcFZpZXdcTlNTY3JvbGxB | |||
|
3034 | bXRzgGyAloBbgJoQMoB4gHWAb08QEEEgAABBIAAAQZgAAEGYAACADIBsgJSAcIBw0gAOAD4AaQIfgDSl | |||
|
3035 | AhsCGgIQAhUCFIBwgJSAloB1gHjbAFwADgBuAL0AXQBeAL4AWgC/AGAAqAIKAMECKADFAikAxwIqAGEC | |||
|
3036 | LAIKAiqAboBTgJOAcYBygAyAhoBugHLSAA4APgBpAjGANKECKoBy3xAVAFwCNAAOAjUCNgFBAjcCDAI4 | |||
|
3037 | AjkCOgBeAF8COwBaAjwCPQBgAj4CPwJAAhsAiQJCAkMCRADKAHoCFAJIAMUCSQBkAkoAegBhAk0AkAIb | |||
|
3038 | Ak8AVgJQXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2NhbFlOU1R2RmxhZ3NcTlNIZWFkZXJW | |||
|
3039 | aWV3XxASTlNBbGxvd3NUeXBlU2VsZWN0XxAXTlNJbnRlcmNlbGxTcGFjaW5nV2lkdGhfEBlOU0NvbHVt | |||
|
3040 | bkF1dG9yZXNpemluZ1N0eWxlXxAYTlNJbnRlcmNlbGxTcGFjaW5nSGVpZ2h0WU5TRW5hYmxlZFtOU0dy | |||
|
3041 | aWRDb2xvcl8QD05TR3JpZFN0eWxlTWFza15OU1RhYmxlQ29sdW1uc18QHE5TRHJhZ2dpbmdTb3VyY2VN | |||
|
3042 | YXNrRm9yTG9jYWxbTlNSb3dIZWlnaHSAcICSE//////WwAAAgHSATwmAeCNACAAAAAAAACNAAAAAAAAA | |||
|
3043 | AIBzCYAMgI+AcIB7I0AxAAAAAAAAWnsxNTYsIDIwMH3XAFwADgBeAF8AWgBgAlMCFQJVAGQCVgBhAhUC | |||
|
3044 | KltOU1RhYmxlVmlld4B1gHeAdoAMgHWActsAXAAOAG4AvQBdAF4AvgBaAL8AYACoAgoAwQJdAMUCXgDH | |||
|
3045 | AkQAYQIsAgoCRIBugFOAmYCYgHSADICGgG6AdFl7MTU2LCAxN33SADcAOAJmAmekAmcBjAGNADtfEBFO | |||
|
3046 | U1RhYmxlSGVhZGVyVmlld9YAXAAOAG4AXgBaAGACCgJqAmsAZABhAgqAboB6gHmADIBuXxAUe3sxNTcs | |||
|
3047 | IDB9LCB7MTYsIDE3fX3SADcAOAJwAnGkAnEBjAGNADtdX05TQ29ybmVyVmlld9IADgA+AGkCdIA0ogJ1 | |||
|
3048 | AnaAfICL2gJ4AA4CeQETAnoCewJ8An0CfgJTAHoCgAKBAoICgwFYAoQChQB6AipeTlNJc1Jlc2l6ZWFi | |||
|
3049 | bGVcTlNIZWFkZXJDZWxsWk5TRGF0YUNlbGxeTlNSZXNpemluZ01hc2taTlNNaW5XaWR0aFpOU01heFdp | |||
|
3050 | ZHRoXE5TSXNFZGl0YWJsZQmAioB9I0BRwAAAAAAAgIMjQEQAAAAAAAAjQI9AAAAAAAAJgHLXAccADgFB | |||
|
3051 | AcgByQHKAcsCiQKKAosCjAHQAIkCjhIEgf4AgIKAf4B+gGKAgFhWYXJpYWJsZdMADgFOAVYBUAFYApKA | |||
|
3052 | OUswLjMzMzMzMjk5ANUADgFUAU4BZAFlAVABSADdApYBaYA5gDqAgYA/XxAPaGVhZGVyVGV4dENvbG9y | |||
|
3053 | 0gA3ADgCmgKbpQKbAeoB6wHsADtfEBFOU1RhYmxlSGVhZGVyQ2VsbNgBxwAOAUEByAHJAp0BygHLAp4B | |||
|
3054 | zQIsAqECogIqAqQCpV1OU0NvbnRyb2xWaWV3EhQh/kCAaICGgISAhYByEQgAgIhZVGV4dCBDZWxs1AAO | |||
|
3055 | AdQB1QHWAdcCqQHZAquAZCNAKgAAAAAAAIBjEQQU1QAOAVQBTgFkAWUBUAFnAN0CrwFpgDmAQYCHgD9f | |||
|
3056 | EBZjb250cm9sQmFja2dyb3VuZENvbG9y1QAOAVQBTgFkAWUBUAFIAN0CtQFpgDmAOoCJgD9fEBBjb250 | |||
|
3057 | cm9sVGV4dENvbG9y0gA3ADgCuQK6ogK6ADtdTlNUYWJsZUNvbHVtbtoCeAAOAnkBEwJ6AnsCfAJ9An4C | |||
|
3058 | UwB6AoACvgK/AsABWAKEAoUAegIqCYCKgIwjQFPAAAAAAACAjgmActcBxwAOAUEByAHJAcoBywKJAooC | |||
|
3059 | iwLGAdAAiQKOgIKAf4CNgGKAgFVWYWx1ZdgBxwAOAUEByAHJAp0BygHLAp4BzQIsAqECogIqAqQCpYBo | |||
|
3060 | gIaAhICFgHKAiNUADgFUAU4BZAFlAVAC0wDdAtQBaYA5gJGAkIA/WWdyaWRDb2xvctMADgFOAVYBUAFY | |||
|
3061 | AtmAOUQwLjUA0gA3ADgC2wJTpQJTAbABjAGNADtfEBV7ezEsIDE3fSwgezE1NiwgMjAwfX3ZAFwBnwAO | |||
|
3062 | AG4AXgBaAaAAYAGhAgoCCgGkAuEAZABhAagCCgLlgG6AboBXgJWADIBWgG4jP+/gP4AAAABfEBZ7ezE1 | |||
|
3063 | NywgMTd9LCB7MTUsIDIwMH192gBcAZ8ADgBuAKYAXgBaAaAAYAGhAgoCCgGkAusAkABkAGEBqAIKAu+A | |||
|
3064 | boBugFeAl4AMgFaAbiM/5vlvoAAAAF8QFXt7MSwgMjE3fSwgezE1NiwgMTV9fdIADgA+AGkC84A0oQJE | |||
|
3065 | gHRfEBN7ezEsIDB9LCB7MTU2LCAxN319XxAWe3sxOCwgMTR9LCB7MTczLCAyMzN9fV8QFHt7MSwgMX0s | |||
|
3066 | IHsyMDksIDI1N319XxAWe3s0NzQsIDB9LCB7MjExLCAyNzN9fdcBxwAOAUEByAHJAcoBywHMAc0BzgL8 | |||
|
3067 | AdAAiQL+gGiAZYCegGKAn1lXb3Jrc3BhY2XTAA4BTgFWAVABWAHngDlfEBZ7ezIwLCA0NH0sIHs2ODUs | |||
|
3068 | IDI3M319XxAgaXB5dGhvbjFfY29uc29sZV93b3Jrc3BhY2Vfc3BsaXTSADcAOAMFAwakAwYBjAGNADtb | |||
|
3069 | TlNTcGxpdFZpZXfaAFwADgBuAwgDCQBeAFoDCgBgAwsATQMNAw4DDwMQAxEAYQMTAE0DFVpOU01heFZh | |||
|
3070 | bHVlWk5TTWluVmFsdWVZTlNwaUZsYWdzXE5TRHJhd01hdHJpeIALgKeApiNAWQAAAAAAACNAMAAAAAAA | |||
|
3071 | ABEFIYAMEXEKgAuApNEADgMXgKXSADcAOAMZAxqiAxoAO1pOU1BTTWF0cml4XxAVe3s2ODksIDIwfSwg | |||
|
3072 | ezE2LCAxNn190gA3ADgDHQMepAMeAYwBjQA7XxATTlNQcm9ncmVzc0luZGljYXRvclp7NzI1LCAzMzd9 | |||
|
3073 | XxAVe3swLCAwfSwgezEyODAsIDc3OH19XxAQaXB5dGhvbjFfc2FuZGJveNIANwA4AyMDJKIDJAA7XxAQ | |||
|
3074 | TlNXaW5kb3dUZW1wbGF0ZdIADgA+AGkDJ4A0rxAvAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2 | |||
|
3075 | AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNU | |||
|
3076 | A1UDVoCugLyAwoDHgM2A04DYgN6A5IDpgO2A84D4gPyBAQKBAQaBAQqBAQ+BAROBARmBAR6BASKBASaB | |||
|
3077 | ASuBATCBATWBATqBAT6BAUKBAUeBAU2BAU+BAVOBAVmBAV6BAWKBAWeBAWmBAWuBAXCBAXWBAXmBAX2B | |||
|
3078 | AYyBAZCBAZOBAZfTAA4DWANZA1oDWwNcWE5TU291cmNlV05TTGFiZWyAu4CvgLrZAA4DXgNfA2ADYQNi | |||
|
3079 | A2MDZANlA2YDZwNoA2kDagNrA2wDbQBVV05TVGl0bGVfEBFOU0tleUVxdWl2TW9kTWFza1pOU0tleUVx | |||
|
3080 | dWl2XU5TTW5lbW9uaWNMb2NZTlNPbkltYWdlXE5TTWl4ZWRJbWFnZVZOU01lbnVVTlNUYWeAuYCxEgAQ | |||
|
3081 | AACAshJ/////gLOAt4Cw0wAOA14DbwNwA3EDcltOU01lbnVJdGVtc4EBoIEBp4EBqVxTbWFydCBRdW90 | |||
|
3082 | ZXNRZ9MADgAyA3YDdwN4A3leTlNSZXNvdXJjZU5hbWWAtoC0gLVXTlNJbWFnZV8QD05TTWVudUNoZWNr | |||
|
3083 | bWFya9IANwA4A30DfqIDfgA7XxAQTlNDdXN0b21SZXNvdXJjZdMADgAyA3YDdwN4A4KAtoC0gLhfEBBO | |||
|
3084 | U01lbnVNaXhlZFN0YXRl0gA3ADgDhQOGogOGADtaTlNNZW51SXRlbV8QIXRvZ2dsZUF1dG9tYXRpY1F1 | |||
|
3085 | b3RlU3Vic3RpdHV0aW9uOtIANwA4A4kDiqMDigOLADtfEBVOU05pYkNvbnRyb2xDb25uZWN0b3JeTlNO | |||
|
3086 | aWJDb25uZWN0b3LTAA4DWANZA1oDjgOPgLuAvYDB2AAOA14DXwNgA2EDYgNjA2QDZgOSA2gDkwNqA2sD | |||
|
3087 | bAOWgLmAv4DAgLOAt4C+0wAOA14DbwNwA5kDmoEBoIEB0oEB1F8QEUp1bXAgdG8gU2VsZWN0aW9uUWpf | |||
|
3088 | EB1jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOtMADgNYA1kDWgOgA6GAu4DDgMbZAA4DXgNfA2AD | |||
|
3089 | YQNiA2MDZANlA2YDpANoA6UDagNrA2wDbQCQgLmAxIDFgLOAt4CwXxAQU21hcnQgQ29weS9QYXN0ZVFm | |||
|
3090 | XxAYdG9nZ2xlU21hcnRJbnNlcnREZWxldGU60wAOA1gDWQNaA64Dr4C7gMiAzNgADgNeA18DYANhA2ID | |||
|
3091 | YwNkA2YDsgNoA7MDagNrA2wDtoC5gMqAy4CzgLeAydMADgNeA28DcAO5A7qBAaCBAcCBAcJUU2F2ZVFz | |||
|
3092 | XXNhdmVEb2N1bWVudDrTAA4DWANZA1oDwAPBgLuAzoDS2AAOA14DXwNgA2EDYgNjA2QDZgPEA2gDxQNq | |||
|
3093 | A2sDbAPIgLmA0IDRgLOAt4DP0wAOA14DbwNwA8sDzIEBoIEBzIEBzlRVbmRvUXpVdW5kbzrTAA4DWANZ | |||
|
3094 | A1oD0gPTgLuA1IDX2AAOA14DXwNgA2EDYgNjA2QDZgPWA9cD2ANqA2sDbAPIgLmA1RIAEgAAgNaAs4C3 | |||
|
3095 | gM9UUmVkb1FaVXJlZG860wAOA1gDWQNaA+ED4oC7gNmA3dgADgNeA18DYANhA2IDYwNkA2YD5QPmA+cD | |||
|
3096 | agNrA2wD6oC5gNsSABgAAIDcgLOAt4Da1AAOA14B1QNvA3AD7QPuA++BAaCBAa6BAb6BAbBbSGlkZSBP | |||
|
3097 | dGhlcnNRaF8QFmhpZGVPdGhlckFwcGxpY2F0aW9uczrTAA4DWANZA1oD9QP2gLuA34Dj2AAOA14DXwNg | |||
|
3098 | A2EDYgNjA2QDZgP5A9cD+gNqA2sDbAP9gLmA4YDigLOAt4Dg0wAOA14DbwNwBAAEAYEBoIEB4YEB41tT | |||
|
3099 | aG93IENvbG9yc1FDXxAVb3JkZXJGcm9udENvbG9yUGFuZWw60wAOA1gDWQNaBAcECIC7gOWA6NgADgNe | |||
|
3100 | A18DYANhA2IDYwNkA2YECwNoBAwDagNrA2wDyIC5gOaA54CzgLeAz1VQYXN0ZVF2VnBhc3RlOtMADgNY | |||
|
3101 | A1kDWgQVBBaAu4DqgOzZAA4DXgNfA2ADYQNiA2MDZANlA2YEGQNoA6UDagNrA2wDlgCQgLmA64DFgLOA | |||
|
3102 | t4C+ZQBGAGkAbgBkICZfEBdwZXJmb3JtRmluZFBhbmVsQWN0aW9uOtMADgNYA1kDWgQiBCOAu4DugPLY | |||
|
3103 | AA4DXgNfA2ADYQNiA2MDZANmBCYDaAQnA2oDawNsBCqAuYDwgPGAs4C3gO/TAA4DXgNvA3AELQQugQGg | |||
|
3104 | gQGdgQGfXVN0b3AgU3BlYWtpbmddc3RvcFNwZWFraW5nOtQADgQyA1gDWQQzBDQAQQQ2XU5TRGVzdGlu | |||
|
3105 | YXRpb26A94D0gAeA9tIADgAyADMEOYAEgPVfEBZJUHl0aG9uQ29jb2FDb250cm9sbGVyWGRlbGVnYXRl | |||
|
3106 | 0gA3ADgEPQQ+owQ+A4sAO18QFE5TTmliT3V0bGV0Q29ubmVjdG9y0wAOA1gDWQNaBEEEQoC7gPmA+9gA | |||
|
3107 | DgNeA18DYANhA2IDYwNkA2YERQNoBCcDagNrA2wDyIC5gPqA8YCzgLeAz1ZEZWxldGVXZGVsZXRlOtMA | |||
|
3108 | DgNYA1kDWgROBE+Au4D9gQEB2AAOA14DXwNgA2EDYgNjA2QDZgRSA2gEUwNqA2sDbARWgLmA/4EBAICz | |||
|
3109 | gLeA/tQADgNeAdUDbwNwBFkEWgRbgQGggQHrgQHvgQHtWE1pbmltaXplUW1fEBNwZXJmb3JtTWluaWF0 | |||
|
3110 | dXJpemU60wAOA1gDWQNaBGEEYoC7gQEDgQEF2AAOA14DXwNgA2EDYgNjA2QDZgRlA2gEJwNqA2sDbARW | |||
|
3111 | gLmBAQSA8YCzgLeA/l8QEkJyaW5nIEFsbCB0byBGcm9udF8QD2FycmFuZ2VJbkZyb250OtMADgNYA1kD | |||
|
3112 | WgRuBG+Au4EBB4EBCdgADgNeA18DYANhA2IDYwNkA2YEcgNoBCcDagNrA2wD6oC5gQEIgPGAs4C3gNpY | |||
|
3113 | U2hvdyBBbGxfEBZ1bmhpZGVBbGxBcHBsaWNhdGlvbnM60wAOA1gDWQNaBHsEfIC7gQELgQEO2AAOA14D | |||
|
3114 | XwNgA2EDYgNjA2QDZgR/A2gEgANqA2sDbAO2gLmBAQyBAQ2As4C3gMlVQ2xvc2VRd11wZXJmb3JtQ2xv | |||
|
3115 | c2U61AAOBDIDWANZA1oAHwSKBIuAu4ACgQEQgQES1wAOA14DYANhA2IDYwNkA2YEjgQnA2oDawNsA+qA | |||
|
3116 | uYEBEYDxgLOAt4DaXxAVQWJvdXQgSVB5dGhvbjFTYW5kYm94XxAdb3JkZXJGcm9udFN0YW5kYXJkQWJv | |||
|
3117 | dXRQYW5lbDrTAA4DWANZA1oElwSYgLuBARSBARjYAA4DXgNfA2ADYQNiA2MDZANmBJsDaAScA2oDawNs | |||
|
3118 | BJ+AuYEBFoEBF4CzgLeBARXTAA4DXgNvA3AEogSjgQGggQHdgQHfXkNoZWNrIFNwZWxsaW5nUTteY2hl | |||
|
3119 | Y2tTcGVsbGluZzrTAA4DWANZA1oEqQSqgLuBARqBAR3YAA4DXgNfA2ADYQNiA2MDZANmBK0DaASuA2oD | |||
|
3120 | awNsA8iAuYEBG4EBHICzgLeAz1pTZWxlY3QgQWxsUWFac2VsZWN0QWxsOtMADgNYA1kDWgS3BLiAu4EB | |||
|
3121 | H4EBIdgADgNeA18DYANhA2IDYwNkA2YEuwNoA+cDagNrA2wD6oC5gQEggNyAs4C3gNpfEBRIaWRlIElQ | |||
|
3122 | eXRob24xU2FuZGJveFVoaWRlOtMADgNYA1kDWgTEBMWAu4EBI4EBJdgADgNeA18DYANhA2IDYwNkA2YE | |||
|
3123 | yANoBCcDagNrA2wEn4C5gQEkgPGAs4C3gQEVXxAbQ2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nXxAe | |||
|
3124 | dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmc60wAOA1gDWQNaBNEE0oC7gQEngQEq2AAOA14DXwNg | |||
|
3125 | A2EDYgNjA2QDZgTVA2gE1gNqA2sDbAO2gLmBASiBASmAs4C3gMlmAFAAcgBpAG4AdCAmUXBWcHJpbnQ6 | |||
|
3126 | 0wAOA1gDWQNaBN8E4IC7gQEsgQEv2AAOA14DXwNgA2EDYgNjA2QDZgTjA9cE5ANqA2sDbAO2gLmBAS2B | |||
|
3127 | AS6As4C3gMloAFMAYQB2AGUAIABBAHMgJlFTXxAPc2F2ZURvY3VtZW50QXM60wAOA1gDWQNaBO0E7oC7 | |||
|
3128 | gQExgQE02AAOA14DXwNgA2EDYgNjA2QDZgTxA2gE8gNqA2sDbAPqgLmBATKBATOAs4C3gNpfEBRRdWl0 | |||
|
3129 | IElQeXRob24xU2FuZGJveFFxWnRlcm1pbmF0ZTrTAA4DWANZA1oE+wT8gLuBATaBATnZAA4DXgNfA2AD | |||
|
3130 | YQNiA2MDZANlA2YE/wPXBQADagNrA2wDbQFYgLmBATeBATiAs4C3gLBbU21hcnQgTGlua3NRR18QHXRv | |||
|
3131 | Z2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb2461AAOBDIDWANZBDMENAUKBQuA94D0gQE7gQE90gAOADIA | |||
|
3132 | MwUOgASBATxfEBpJUHl0aG9uMVNhbmRib3hBcHBEZWxlZ2F0ZV8QEWlweXRob25Db250cm9sbGVy0wAO | |||
|
3133 | A1gDWQNaBRMFFIC7gQE/gQFB2AAOA14DXwNgA2EDYgNjA2QDZgUXA2gEJwNqA2sDbARWgLmBAUCA8YCz | |||
|
3134 | gLeA/lRab29tXHBlcmZvcm1ab29tOtMADgNYA1kDWgUgBSGAu4EBQ4EBRtgADgNeA18DYANhA2IDYwNk | |||
|
3135 | A2YFJANoBSUDagNrA2wDyIC5gQFEgQFFgLOAt4DPVENvcHlRY1Vjb3B5OtMADgNYA1kDWgUuBS+Au4EB | |||
|
3136 | SIEBTNgADgNeA18DYANhA2IDYwNkA2YFMgPmBTMDagNrA2wFNoC5gQFKgQFLgLOAt4EBSdMADgNeA28D | |||
|
3137 | cAU5BTqBAaCBAeeBAelcU2hvdyBUb29sYmFyUXRfEBN0b2dnbGVUb29sYmFyU2hvd2461AAOBDIDWANZ | |||
|
3138 | BDMFCgVBBDaA94EBO4EBToD20gAOADIAMwA0gASAA9MADgNYA1kDWgVIBUmAu4EBUIEBUtgADgNeA18D | |||
|
3139 | YANhA2IDYwNkA2YFTANoBCcDagNrA2wEKoC5gQFRgPGAs4C3gO9eU3RhcnQgU3BlYWtpbmdec3RhcnRT | |||
|
3140 | cGVha2luZzrTAA4DWANZA1oFVQVWgLuBAVSBAVjYAA4DXgNfA2ADYQNiA2MDZANmBVkDaAVaA2oDawNs | |||
|
3141 | BV2AuYEBVoEBV4CzgLeBAVXTAA4DXgNvA3AFYAVhgQGggQHxgQHzXxAUSVB5dGhvbjFTYW5kYm94IEhl | |||
|
3142 | bHBRP1lzaG93SGVscDrTAA4DWANZA1oFZwVogLuBAVqBAV3YAA4DXgNfA2ADYQNiA2MDZANmBWsDaAQn | |||
|
3143 | A2oDawNsBW+AuYEBXIDxgLOAt4EBW9QADgNeAdUDbwNwBXIFcwV0gQGggQGigQGlgQGkWkNsZWFyIE1l | |||
|
3144 | bnVfEBVjbGVhclJlY2VudERvY3VtZW50czrTAA4DWANZA1oFeQV6gLuBAV+BAWHYAA4DXgNfA2ADYQNi | |||
|
3145 | A2MDZANmBX0DaAQnA2oDawNsBTaAuYEBYIDxgLOAt4EBSW8QEgBDAHUAcwB0AG8AbQBpAHoAZQAgAFQA | |||
|
3146 | bwBvAGwAYgBhAHIgJl8QH3J1blRvb2xiYXJDdXN0b21pemF0aW9uUGFsZXR0ZTrTAA4DWANZA1oFhgWH | |||
|
3147 | gLuBAWOBAWbYAA4DXgNfA2ADYQNiA2MDZANmBYoDaAWLA2oDawNsA8iAuYEBZIEBZYCzgLeAz1NDdXRR | |||
|
3148 | eFRjdXQ61AAOBDIDWANZBDMAyAQ0BZaA94AYgPSBAWhYdGV4dFZpZXfUAA4EMgNYA1kEMwDIAEEFnID3 | |||
|
3149 | gBiAB4EBal8QFWluaXRpYWxGaXJzdFJlc3BvbmRlctMADgNYA1kDWgWgBaGAu4EBbIEBb9kADgWjA14D | |||
|
3150 | XwNgA2EDYgNjA2QDZgQnBaYD1wWnA2oDawNsA7ZZTlNUb29sVGlwgLmA8YEBbYEBboCzgLeAyV1QYWdl | |||
|
3151 | IFNldHVwLi4uUVBecnVuUGFnZUxheW91dDrTAA4DWANZA1oFsAWxgLuBAXGBAXTYAA4DXgNfA2ADYQNi | |||
|
3152 | A2MDZANmBbQDaAW1A2oDawNsBJ+AuYEBcoEBc4CzgLeBARVuAFMAaABvAHcAIABTAHAAZQBsAGwAaQBu | |||
|
3153 | AGcgJlE6XxAPc2hvd0d1ZXNzUGFuZWw60wAOA1gDWQNaBb4Fv4C7gQF2gQF41wAOA14DYANhA2IDYwNk | |||
|
3154 | A2YFwgQnA2oDawNsA7aAuYEBd4DxgLOAt4DJXxAPUmV2ZXJ0IHRvIFNhdmVkXxAWcmV2ZXJ0RG9jdW1l | |||
|
3155 | bnRUb1NhdmVkOtMADgNYA1kDWgXLBcyAu4EBeoEBfNgADgNeA18DYANhA2IDYwNkA2YFzwNoBCcDagNr | |||
|
3156 | A2wEn4C5gQF7gPGAs4C3gQEVXxAbQ2hlY2sgR3JhbW1hciBXaXRoIFNwZWxsaW5nXxAWdG9nZ2xlR3Jh | |||
|
3157 | bW1hckNoZWNraW5nOtcADgQyBdcF2ANYA1kF2QXaBdsF3AXdAnUF3wBVWU5TS2V5UGF0aFlOU0JpbmRp | |||
|
3158 | bmdfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JWZXJzaW9ugQGLgQF+gQGKgQGCgHyBAYnbBeEADgXiBeMF | |||
|
3159 | 5AXlBeYF5wXoBekF6gB6BewAegXuAHoF8AXdAHoAegB6BfVfEBpOU0ZpbHRlclJlc3RyaWN0c0luc2Vy | |||
|
3160 | dGlvbl8QFE5TUHJlc2VydmVzU2VsZWN0aW9uXE5TSW5pdGlhbEtleVpOU0VkaXRhYmxlXk5TRGVjbGFy | |||
|
3161 | ZWRLZXlzXk5TSW5pdGlhbFZhbHVlXxAiTlNDbGVhcnNGaWx0ZXJQcmVkaWNhdGVPbkluc2VydGlvbl8Q | |||
|
3162 | GE5TU2VsZWN0c0luc2VydGVkT2JqZWN0c18QFk5TQXZvaWRzRW1wdHlTZWxlY3Rpb25fEBFOU1NvcnRE | |||
|
3163 | ZXNjcmlwdG9ycwmBAYgJgQGBCYEBf4EBggkJCYEBg9IADgA+AGkF+IA0owX5Be4F3YEBgIEBgYEBglRr | |||
|
3164 | ZXlzU2tleVV2YWx1ZdIADgA+BgAGAYEBh6EGAoEBhNQADgYEBgUGBgYHBe4GCQB6VU5TS2V5Wk5TU2Vs | |||
|
3165 | ZWN0b3JbTlNBc2NlbmRpbmeBAYaBAYGBAYUJWGNvbXBhcmU60gA3ADgGDQYOogYOADtfEBBOU1NvcnRE | |||
|
3166 | ZXNjcmlwdG9y0gA3ADgGEAE4ogE4ADvSADcAOAYSBhOlBhMGFAYVBhYAO18QFk5TRGljdGlvbmFyeUNv | |||
|
3167 | bnRyb2xsZXJfEBFOU0FycmF5Q29udHJvbGxlcl8QEk5TT2JqZWN0Q29udHJvbGxlclxOU0NvbnRyb2xs | |||
|
3168 | ZXJfEBp2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmtleV8QE2FycmFuZ2VkT2JqZWN0cy5rZXnSADcAOAYa | |||
|
3169 | BhujBhsDiwA7XxAVTlNOaWJCaW5kaW5nQ29ubmVjdG9y1wAOBDIF1wXYA1gDWQXZBdoENAYfBiAF2wYi | |||
|
3170 | AFWBAYuA9IEBj4EBjoEBfoEBjV8QGWNvbnRlbnREaWN0aW9uYXJ5OiB1c2VyTlNfEBFjb250ZW50RGlj | |||
|
3171 | dGlvbmFyeVZ1c2VyTlPXAA4EMgXXBdgDWANZBdkF2gXbBikF3QJ2BiwAVYEBi4EBfoEBkoEBgoCLgQGR | |||
|
3172 | XxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy52YWx1ZV8QFWFycmFuZ2VkT2JqZWN0cy52YWx1ZdcADgQy | |||
|
3173 | BdcF2ANYA1kF2QXaBQoGMgYzBdsGNQBVgQGLgQE7gQGWgQGVgQF+gQGUXxApZmlsdGVyUHJlZGljYXRl | |||
|
3174 | OiB3b3Jrc3BhY2VGaWx0ZXJQcmVkaWNhdGVfEA9maWx0ZXJQcmVkaWNhdGVfEBh3b3Jrc3BhY2VGaWx0 | |||
|
3175 | ZXJQcmVkaWNhdGXXAA4EMgXXBdgDWANZBdkF2gQ0BjwGPQBsBj8AVYEBi4D0gQGagQGZgKOBAZhfEBlh | |||
|
3176 | bmltYXRlOiB3YWl0aW5nRm9yRW5naW5lV2FuaW1hdGVfEBB3YWl0aW5nRm9yRW5naW5l0gAOAD4GAAZF | |||
|
3177 | gQGHrxBnA1sGRwTfAkQCdQZLBIoEQQUgBW8GUATRBbAFywZUBFYFLgZXBYYGWQIKA20GXATtBl4GXwS3 | |||
|
3178 | BmEGYgBNBdsAawVVBHsFoAZpBmoAyAUKBGEGbgSpBnAAbAZyBBUD9QIaA8gAfwPqAnYEIgZ7BJcGfQOO | |||
|
3179 | Bn8GgAV5AioGgwSfAhAETgPSBogEBwCqBb4D4QaNBo4D/QLAA64AfgaTBG4FEwTEAKMFXQT7BpoGmwOg | |||
|
3180 | BTYDlgafBWcEKgPABDQFQQKDAEEAsQaoBqkFSAO2BqyAr4EBnIEBLIB0gHyBAaGBARCA+YEBQ4EBW4EB | |||
|
3181 | poEBJ4EBcYEBeoEBqoD+gQFIgQHDgQFjgQHwgG6AsIEB2YEBMYEBv4EBz4EBH4EB5oEB5IALgQF+gA6B | |||
|
3182 | AVSBAQuBAWyBAbaBAbWAGIEBO4EBA4EB6oEBGoEBxoCjgQG9gOqA34CUgM+AaoDagIuA7oEBrYEBFIEB | |||
|
3183 | y4C9gQHQgQHugQFfgHKBAbGBARWAloD9gNSBAdGA5YBYgQF2gNmBAdeBAbyA4ICOgMiAEIEB1YEBB4EB | |||
|
3184 | P4EBI4AUgQFVgQE2gQHcgQGygMOBAUmAvoEB4IEBWoDvgM6A9IEBToCDgAeAVIEBuYEByoEBUIDJgQHJ | |||
|
3185 | 2gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YEKgQtA2gEJwNqA2sDbAPIBrZZTlNTdWJtZW51gLmA74EBnYDx | |||
|
3186 | gLOAt4DPgQGeVlNwZWVjaF5zdWJtZW51QWN0aW9uOtIADgA+AGkGu4A0ogVIBCKBAVCA7tIANwA4Br8D | |||
|
3187 | ZKIDZAA72gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YFbwVyA2gEJwNqA2sDbAO2BsiAuYEBW4EBooDxgLOA | |||
|
3188 | t4DJgQGjW09wZW4gUmVjZW500gAOAD4AaQbMgDShBWeBAVpfEBZfTlNSZWNlbnREb2N1bWVudHNNZW51 | |||
|
3189 | 2gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YDbQNxA2gEJwNqA2sDbAPIBteAuYCwgQGngPGAs4C3gM+BAahd | |||
|
3190 | U3Vic3RpdHV0aW9uc9IADgA+AGkG24A0owOgA1sE+4DDgK+BATbUAA4DXgHVA28DcAbhBuIG44EBoIEB | |||
|
3191 | q4EB9IEBrFlBTWFpbk1lbnXSAA4APgBpBueANKcGewZeBn0GnwZhBm4GWYEBrYEBv4EBy4EB4IEB5oEB | |||
|
3192 | 6oEB8NoADgauA14DXwNgA2EDYgNjA2QBoANmA+oD7QNoBCcDagNrA2wGVAb3gLmA2oEBroDxgLOAt4EB | |||
|
3193 | qoEBr18QD0lQeXRob24xU2FuZGJveNIADgA+AGkG+4A0qwSKBoMGmwZqBmkGjgS3A+EEbgZyBO2BARCB | |||
|
3194 | AbGBAbKBAbWBAbaBAbyBAR+A2YEBB4EBvYEBMdoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcA | |||
|
3195 | egNqA2sDbAPqXU5TSXNTZXBhcmF0b3JcTlNJc0Rpc2FibGVkgLmA8QmA8QmAs4C3gNrYAA4DXgNfA2AD | |||
|
3196 | YQNiA2MDZANmBxQDaAcVA2oDawNsA+qAuYEBs4EBtICzgLeA2mwAUAByAGUAZgBlAHIAZQBuAGMAZQBz | |||
|
3197 | ICZRLNoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcAegNqA2sDbAPqgLmA8QmA8QmAs4C3gNra | |||
|
3198 | AA4GrgNeA18DYANhA2IDYwNkAaADZgaoBycDaAQnA2oDawNsA+oHLIC5gQG5gQG3gPGAs4C3gNqBAbhY | |||
|
3199 | U2VydmljZXPUAA4DXgHVA28DcAcnBzEHMoEBoIEBt4EBu4EButIADgA+AGkHNYA0oF8QD19OU1NlcnZp | |||
|
3200 | Y2VzTWVuddoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcAegNqA2sDbAPqgLmA8QmA8QmAs4C3 | |||
|
3201 | gNraAA4DXgNfBwgDYAcJA2EDYgNjA2QDZgQnA2gAegQnAHoDagNrA2wD6oC5gPEJgPEJgLOAt4DaXF9O | |||
|
3202 | U0FwcGxlTWVuddoADgauA14DXwNgA2EDYgNjA2QBoANmA7YDuQNoBCcDagNrA2wGVAdSgLmAyYEBwIDx | |||
|
3203 | gLOAt4EBqoEBwVRGaWxl0gAOAD4AaQdWgDSrBlcGcAZLBqwEewOuBN8FvgapBaAE0YEBw4EBxoEBoYEB | |||
|
3204 | yYEBC4DIgQEsgQF2gQHKgQFsgQEn2AAOA14DXwNgA2EDYgNjA2QDZgdkA2gHZQNqA2sDbAO2gLmBAcSB | |||
|
3205 | AcWAs4C3gMlTTmV3UW7YAA4DXgNfA2ADYQNiA2MDZANmB20DaAduA2oDawNsA7aAuYEBx4EByICzgLeA | |||
|
3206 | yWUATwBwAGUAbiAmUW/aAA4DXgNfBwgDYAcJA2EDYgNjA2QDZgQnA2gAegQnAHoDagNrA2wDtoC5gPEJ | |||
|
3207 | gPEJgLOAt4DJ2gAOA14DXwcIA2AHCQNhA2IDYwNkA2YEJwNoAHoEJwB6A2oDawNsA7aAuYDxCYDxCYCz | |||
|
3208 | gLeAydoADgauA14DXwNgA2EDYgNjA2QBoANmA8gDywNoBCcDagNrA2wGVAeOgLmAz4EBzIDxgLOAt4EB | |||
|
3209 | qoEBzVRFZGl00gAOAD4AaQeSgDStA8AD0gZfBYYFIAQHBEEEqQZ/BogGmgZQBkeAzoDUgQHPgQFjgQFD | |||
|
3210 | gOWA+YEBGoEB0IEB0YEB3IEBpoEBnNoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcAegNqA2sD | |||
|
3211 | bAPIgLmA8QmA8QmAs4C3gM/aAA4DXgNfBwgDYAcJA2EDYgNjA2QDZgQnA2gAegQnAHoDagNrA2wDyIC5 | |||
|
3212 | gPEJgPEJgLOAt4DP2gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YDlgOZA2gEJwNqA2sDbAPIB7qAuYC+gQHS | |||
|
3213 | gPGAs4C3gM+BAdNURmluZNIADgA+AGkHvoA0pQQVBpMGjQZcA46A6oEB1YEB14EB2YC92QAOA14DXwNg | |||
|
3214 | A2EDYgNjA2QDZQNmB8YDaANpA2oDawNsA5YAVYC5gQHWgLKAs4C3gL5ZRmluZCBOZXh02QAOA14DXwNg | |||
|
3215 | A2EDYgNjA2QDZQNmB84D1wUAA2oDawNsA5YBWIC5gQHYgQE4gLOAt4C+XUZpbmQgUHJldmlvdXPZAA4D | |||
|
3216 | XgNfA2ADYQNiA2MDZANlA2YH1gNoB9cDagNrA2wDlgfbgLmBAdqBAduAs4C3gL4QB18QFlVzZSBTZWxl | |||
|
3217 | Y3Rpb24gZm9yIEZpbmRRZdoADgauA14DXwNgA2EDYgNjA2QBoANmBJ8EogNoBCcDagNrA2wDyAfmgLmB | |||
|
3218 | ARWBAd2A8YCzgLeAz4EB3l8QFFNwZWxsaW5nIGFuZCBHcmFtbWFy0gAOAD4AaQfqgDSkBbAElwTEBcuB | |||
|
3219 | AXGBARSBASOBAXraAA4GrgNeA18DYANhA2IDYwNkAaADZgP9BAADaAQnA2oDawNsBlQH94C5gOCBAeGA | |||
|
3220 | 8YCzgLeBAaqBAeJWRm9ybWF00gAOAD4AaQf7gDSiBmID9YEB5IDf2AAOA14DXwNgA2EDYgNjA2QDZggA | |||
|
3221 | A2gFMwNqA2sDbAP9gLmBAeWBAUuAs4C3gOBaU2hvdyBGb250c9oADgauA14DXwNgA2EDYgNjA2QBoANm | |||
|
3222 | BTYFOQNoBCcDagNrA2wGVAgOgLmBAUmBAeeA8YCzgLeBAaqBAehUVmlld9IADgA+AGkIEoA0ogUuBXmB | |||
|
3223 | AUiBAV/aAA4GrgNeA18DYANhA2IDYwNkAaADZgRWBFkDaAQnA2oDawNsBlQIHYC5gP6BAeuA8YCzgLeB | |||
|
3224 | AaqBAexWV2luZG930gAOAD4AaQghgDSkBE4FEwaABGGA/YEBP4EB7oEBA9oADgNeA18HCANgBwkDYQNi | |||
|
3225 | A2MDZANmBCcDaAB6BCcAegNqA2sDbARWgLmA8QmA8QmAs4C3gP5eX05TV2luZG93c01lbnXaAA4GrgNe | |||
|
3226 | A18DYANhA2IDYwNkAaADZgVdBWADaAQnA2oDawNsBlQIOIC5gQFVgQHxgPGAs4C3gQGqgQHyVEhlbHDS | |||
|
3227 | AA4APgBpCDyANKEFVYEBVFtfTlNNYWluTWVuddIADgA+BgAIQYEBh68QZwNtA8gDtgIKAioDtgPqA8gD | |||
|
3228 | yAZLA8gDtgSfBJ8AHwZuBTYDtgPIBlQAfwZQA5YD6gZUA8gD6gZUA/0AQQAfAE0FXQO2A7YD6gPqAKMA | |||
|
3229 | HwRWBlQDyAO2AE0D6gOWA/0CCgZ9AGsGewIqBCoGVASfBlQDlgPIBFYFNgIKA+oGmgIKBFYDyAPIA8gA | |||
|
3230 | owO2A+oDlgPqBp8CdgO2AGsDlgPqBFYEnwB+BlkDbQPIA+oDbQZhBogGVAVvBkcDyAAfAB8CdQAfAKMG | |||
|
3231 | aQO2BCoGXgO2gLCAz4DJgG6AcoDJgNqAz4DPgQGhgM+AyYEBFYEBFYACgQHqgQFJgMmAz4EBqoBqgQGm | |||
|
3232 | gL6A2oEBqoDPgNqBAaqA4IAHgAKAC4EBVYDJgMmA2oDagBSAAoD+gQGqgM+AyYALgNqAvoDggG6BAcuA | |||
|
3233 | DoEBrYBygO+BAaqBARWBAaqAvoDPgP6BAUmAboDagQHcgG6A/oDPgM+Az4AUgMmA2oC+gNqBAeCAi4DJ | |||
|
3234 | gA6AvoDagP6BARWAEIEB8ICwgM+A2oCwgQHmgQHRgQGqgQFbgQGcgM+AAoACgHyAAoAUgQG2gMmA74EB | |||
|
3235 | v4DJ0gAOAD4GAAirgQGHrxBoA1sGRwTfAkQCdQZLBIoEQQUgBW8E0QZQBbAFywUuBlQEVgZXBYYGWQIK | |||
|
3236 | A20GXATtBl4GXwS3BmEGYgBNBdsAawVVBHsFoAZpBmoAyAUKBGEGbgZwBKkAbAZyBBUD9QIaA8gD6gB/ | |||
|
3237 | BCICdgZ7BJcGfQOOBn8GgAV5AioGgwSfAhAETgPSBogEBwCqBb4D4QaNBo4D/QLAA64AfgaTBG4FEwTE | |||
|
3238 | AKMFXQT7AB8GmgabBTYDoAafA5YFZwQqBDQDwAVBAoMAQQCxBqkGqAVIA7YGrICvgQGcgQEsgHSAfIEB | |||
|
3239 | oYEBEID5gQFDgQFbgQEngQGmgQFxgQF6gQFIgQGqgP6BAcOBAWOBAfCAboCwgQHZgQExgQG/gQHPgQEf | |||
|
3240 | gQHmgQHkgAuBAX6ADoEBVIEBC4EBbIEBtoEBtYAYgQE7gQEDgQHqgQHGgQEagKOBAb2A6oDfgJSAz4Da | |||
|
3241 | gGqA7oCLgQGtgQEUgQHLgL2BAdCBAe6BAV+AcoEBsYEBFYCWgP2A1IEB0YDlgFiBAXaA2YEB14EBvIDg | |||
|
3242 | gI6AyIAQgQHVgQEHgQE/gQEjgBSBAVWBATaAAoEB3IEBsoEBSYDDgQHggL6BAVqA74D0gM6BAU6Ag4AH | |||
|
3243 | gFSBAcqBAbmBAVCAyYEBydIADgA+BgAJFoEBh68QaAkXCRgJGQkaCRsJHAkdCR4JHwkgCSEJIgkjCSQJ | |||
|
3244 | JQkmCScJKAkpCSoJKwksCS0JLgkvCTAJMQkyCTMJNAk1CTYJNwk4CTkJOgk7CTwFDgk+CT8JQAlBCUIJ | |||
|
3245 | QwlECUUJRglHCUgJSQlKCUsJTAlNCU4JTwlQCVEJUglTCVQJVQlWCVcJWAlZCVoJWwlcCV0JXglfCWAJ | |||
|
3246 | YQliCWMJZAllCWYJZwloCWkJaglrCWwJbQluCW8JcAlxCXIJcwl0CXUJdgl3CXgJeQl6CXsJfAl9CX6B | |||
|
3247 | AfiBAfmBAfqBAfuBAfyBAf2BAf6BAf+BAgCBAgGBAgKBAgOBAgSBAgWBAgaBAgeBAgiBAgmBAgqBAguB | |||
|
3248 | AgyBAg2BAg6BAg+BAhCBAhGBAhKBAhOBAhSBAhWBAhaBAheBAhiBAhmBAhqBAhuBAhyBAh2BATyBAh6B | |||
|
3249 | Ah+BAiCBAiGBAiKBAiOBAiSBAiWBAiaBAieBAiiBAimBAiqBAiuBAiyBAi2BAi6BAi+BAjCBAjGBAjKB | |||
|
3250 | AjOBAjSBAjWBAjaBAjeBAjiBAjmBAjqBAjuBAjyBAj2BAj6BAj+BAkCBAkGBAkKBAkOBAkSBAkWBAkaB | |||
|
3251 | AkeBAkiBAkmBAkqBAkuBAkyBAk2BAk6BAk+BAlCBAlGBAlKBAlOBAlSBAlWBAlaBAleBAliBAlmBAlqB | |||
|
3252 | AluBAlyBAl2BAl5fEBhNZW51IEl0ZW0gKFNtYXJ0IFF1b3RlcylfEBJNZW51IEl0ZW0gKFNwZWVjaClR | |||
|
3253 | OF8QEVRhYmxlIEhlYWRlciBWaWV3XxAXVGFibGUgQ29sdW1uIChWYXJpYWJsZSlfEBdNZW51IEl0ZW0g | |||
|
3254 | KE9wZW4gUmVjZW50KV8QIU1lbnUgSXRlbSAoQWJvdXQgSVB5dGhvbjFTYW5kYm94KV8QEk1lbnUgSXRl | |||
|
3255 | bSAoRGVsZXRlKV8QEE1lbnUgSXRlbSAoQ29weSlfEBJNZW51IChPcGVuIFJlY2VudClRNl8QGU1lbnUg | |||
|
3256 | SXRlbSAoU3Vic3RpdHV0aW9ucylvEBoATQBlAG4AdQAgAEkAdABlAG0AIAAoAFMAaABvAHcAIABTAHAA | |||
|
3257 | ZQBsAGwAaQBuAGcgJgApXxAnTWVudSBJdGVtIChDaGVjayBHcmFtbWFyIFdpdGggU3BlbGxpbmcpXxAY | |||
|
3258 | TWVudSBJdGVtIChTaG93IFRvb2xiYXIpWE1haW5NZW51XU1lbnUgKFdpbmRvdylROV8QD01lbnUgSXRl | |||
|
3259 | bSAoQ3V0KVExW1Njcm9sbCBWaWV3XxAUTWVudSAoU3Vic3RpdHV0aW9ucylfECJNZW51IEl0ZW0gKFVz | |||
|
3260 | ZSBTZWxlY3Rpb24gZm9yIEZpbmQpVDExMTFfEBBNZW51IEl0ZW0gKEZpbGUpW1NlcGFyYXRvci01XxAg | |||
|
3261 | TWVudSBJdGVtIChIaWRlIElQeXRob24xU2FuZGJveClfEBBNZW51IEl0ZW0gKFZpZXcpXxAWTWVudSBJ | |||
|
3262 | dGVtIChTaG93IEZvbnRzKVxDb250ZW50IFZpZXdfEBlVc2VyIE5hbWVzcGFjZSBDb250cm9sbGVyWlNw | |||
|
3263 | bGl0IFZpZXdfECBNZW51IEl0ZW0gKElQeXRob24xU2FuZGJveCBIZWxwKVMxLTFRNV8QFE1lbnUgSXRl | |||
|
3264 | bSAoU2VydmljZXMpW1NlcGFyYXRvci0xWVRleHQgVmlld18QHk1lbnUgSXRlbSAoQnJpbmcgQWxsIHRv | |||
|
3265 | IEZyb250KV8QEk1lbnUgSXRlbSAoV2luZG93KW8QEQBNAGUAbgB1ACAASQB0AGUAbQAgACgATwBwAGUA | |||
|
3266 | biAmAClfEBZNZW51IEl0ZW0gKFNlbGVjdCBBbGwpXEFzeW5jIEFycm93c1tTZXBhcmF0b3ItMm8QEQBN | |||
|
3267 | AGUAbgB1ACAASQB0AGUAbQAgACgARgBpAG4AZCAmAClfEBdNZW51IEl0ZW0gKFNob3cgQ29sb3JzKV8Q | |||
|
3268 | EVZlcnRpY2FsIFNjcm9sbGVyW01lbnUgKEVkaXQpXxAWTWVudSAoSVB5dGhvbjFTYW5kYm94KV8QD0Jv | |||
|
3269 | eCAoV29ya3NwYWNlKV8QGU1lbnUgSXRlbSAoU3RvcCBTcGVha2luZylfEBRUYWJsZSBDb2x1bW4gKFZh | |||
|
3270 | bHVlKV8QG01lbnUgSXRlbSAoSVB5dGhvbjFTYW5kYm94KV8QGk1lbnUgSXRlbSAoQ2hlY2sgU3BlbGxp | |||
|
3271 | bmcpXxAQTWVudSBJdGVtIChFZGl0KV8QHU1lbnUgSXRlbSAoSnVtcCB0byBTZWxlY3Rpb24pW1NlcGFy | |||
|
3272 | YXRvci02WVNlcGFyYXRvcm8QHgBNAGUAbgB1ACAASQB0AGUAbQAgACgAQwB1AHMAdABvAG0AaQB6AGUA | |||
|
3273 | IABUAG8AbwBsAGIAYQByICYAKV8QHFRhYmxlIFZpZXcgKFZhcmlhYmxlLCBWYWx1ZSlbU2VwYXJhdG9y | |||
|
3274 | LTNfEBtNZW51IChTcGVsbGluZyBhbmQgR3JhbW1hcilfEBNIb3Jpem9udGFsIFNjcm9sbGVyXxAUTWVu | |||
|
3275 | dSBJdGVtIChNaW5pbWl6ZSlfEBBNZW51IEl0ZW0gKFJlZG8pXxAQTWVudSBJdGVtIChGaW5kKV8QEU1l | |||
|
3276 | bnUgSXRlbSAoUGFzdGUpXxAVSG9yaXpvbnRhbCBTY3JvbGxlci0xUjEwXxAXTWVudSBJdGVtIChIaWRl | |||
|
3277 | IE90aGVycylfEBlNZW51IEl0ZW0gKEZpbmQgUHJldmlvdXMpW1NlcGFyYXRvci00XU1lbnUgKEZvcm1h | |||
|
3278 | dClfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMVEzXUJveCAoQ29uc29sZSlfEBVNZW51IEl0 | |||
|
3279 | ZW0gKEZpbmQgTmV4dClfEBRNZW51IEl0ZW0gKFNob3cgQWxsKV8QEE1lbnUgSXRlbSAoWm9vbSlfECdN | |||
|
3280 | ZW51IEl0ZW0gKENoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZyldU2Nyb2xsIFZpZXctMVEyXxAXTWVu | |||
|
3281 | dSBJdGVtIChTbWFydCBMaW5rcylcRmlsZSdzIE93bmVyXxAgTWVudSBJdGVtIChTcGVsbGluZyBhbmQg | |||
|
3282 | R3JhbW1hcilTMTIxW01lbnUgKFZpZXcpXxAcTWVudSBJdGVtIChTbWFydCBDb3B5L1Bhc3RlKV8QEk1l | |||
|
3283 | bnUgSXRlbSAoRm9ybWF0KVtNZW51IChGaW5kKV8QFk1lbnUgSXRlbSAoQ2xlYXIgTWVudSldTWVudSAo | |||
|
3284 | U3BlZWNoKV8QF1B5dGhvbiBDb2NvYSBDb250cm9sbGVyXxAQTWVudSBJdGVtIChVbmRvKVtBcHBsaWNh | |||
|
3285 | dGlvbl8QG1RleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKV8QGVdpbmRvdyAoSVB5dGhvbjEgKENvY29h | |||
|
3286 | KSlfEBNWZXJ0aWNhbCBTY3JvbGxlci0xUzItMV8QD01lbnUgKFNlcnZpY2VzKV8QGk1lbnUgSXRlbSAo | |||
|
3287 | U3RhcnQgU3BlYWtpbmcpW01lbnUgKEZpbGUpUTfSAA4APgYACeiBAYeg0gAOAD4GAAnrgQGHoNIADgA+ | |||
|
3288 | BgAJ7oEBh68QlwNUA1sGRwNBA0kE3wJEAnUGSwSKBEEFIAVvA0IGUATRA0QDMgNOBbADMQNRA0sFywM+ | |||
|
3289 | AzoGVARWBS4GVwNNBYYGWQMwAgoDbQZcBO0GXgZfAzkDOAS3AywDTAZhBmIDLwBNBdsDQAM0AGsFVQR7 | |||
|
3290 | BaAGaQZqAMgDKwUKBGEGbgSpBnAAbANHBnIEFQP1AhoDyAB/A+oCdgQiAz8GewSXBn0DjgZ/A0oDVgaA | |||
|
3291 | A1UFeQIqA0MGgwSfAhADKgROA9IGiAQHAKoDOwNIBb4D4QaNAzYDPAaOA0UD/QMoAsADrgMzAH4GkwRu | |||
|
3292 | BRMExACjA1IDKQVdBPsAHwaaBpsDoAU2A5YGnwMuBWcDUAQqA8AENANGBUEDNQKDA08AQQCxBqgGqQM3 | |||
|
3293 | Az0DUwMtBUgDtgasgQGQgK+BAZyBATWBAVmBASyAdIB8gQGhgQEQgPmBAUOBAVuBATqBAaaBASeBAUKA | |||
|
3294 | 7YEBa4EBcYDpgQF5gQFigQF6gQEmgQETgQGqgP6BAUiBAcOBAWmBAWOBAfCA5IBugLCBAdmBATGBAb+B | |||
|
3295 | Ac+BAQ+BAQqBAR+AzYEBZ4EB5oEB5IDegAuBAX6BATCA+IAOgQFUgQELgQFsgQG2gQG1gBiAx4EBO4EB | |||
|
3296 | A4EB6oEBGoEBxoCjgQFPgQG9gOqA34CUgM+AaoDagIuA7oEBK4EBrYEBFIEBy4C9gQHQgQFegQGXgQHu | |||
|
3297 | gQGTgQFfgHKBAT6BAbGBARWAloDCgP2A1IEB0YDlgFiBARmBAVOBAXaA2YEB14EBAoEBHoEBvIEBR4Dg | |||
|
3298 | gK6AjoDIgPOAEIEB1YEBB4EBP4EBI4AUgQF9gLyBAVWBATaAAoEB3IEBsoDDgQFJgL6BAeCA2IEBWoEB | |||
|
3299 | dYDvgM6A9IEBTYEBToD8gIOBAXCAB4BUgQG5gQHKgQEGgQEigQGMgNOBAVCAyYEBydIADgA+BgAKiIEB | |||
|
3300 | h68QlwqJCooKiwqMCo0KjgqPCpAKkQqSCpMKlAqVCpYKlwqYCpkKmgqbCpwKnQqeCp8KoAqhCqIKowqk | |||
|
3301 | CqUKpgqnCqgKqQqqCqsKrAqtCq4KrwqwCrEKsgqzCrQKtQq2CrcKuAq5CroKuwq8Cr0Kvgq/CsAKwQrC | |||
|
3302 | CsMKxArFCsYKxwrICskKygrLCswKzQrOCs8K0ArRCtIK0wrUCtUK1grXCtgK2QraCtsK3ArdCt4K3wrg | |||
|
3303 | CuEK4grjCuQK5QrmCucK6ArpCuoK6wrsCu0K7grvCvAK8QryCvMK9Ar1CvYK9wr4CvkK+gr7CvwK/Qr+ | |||
|
3304 | Cv8LAAsBCwILAwsECwULBgsHCwgLCQsKCwsLDAsNCw4LDwsQCxELEgsTCxQLFQsWCxcLGAsZCxoLGwsc | |||
|
3305 | Cx0LHgsfgQJjgQJkgQJlgQJmgQJngQJogQJpgQJqgQJrgQJsgQJtgQJugQJvgQJwgQJxgQJygQJzgQJ0 | |||
|
3306 | gQJ1gQJ2gQJ3gQJ4gQJ5gQJ6gQJ7gQJ8gQJ9gQJ+gQJ/gQKAgQKBgQKCgQKDgQKEgQKFgQKGgQKHgQKI | |||
|
3307 | gQKJgQKKgQKLgQKMgQKNgQKOgQKPgQKQgQKRgQKSgQKTgQKUgQKVgQKWgQKXgQKYgQKZgQKagQKbgQKc | |||
|
3308 | gQKdgQKegQKfgQKggQKhgQKigQKjgQKkgQKlgQKmgQKngQKogQKpgQKqgQKrgQKsgQKtgQKugQKvgQKw | |||
|
3309 | gQKxgQKygQKzgQK0gQK1gQK2gQK3gQK4gQK5gQK6gQK7gQK8gQK9gQK+gQK/gQLAgQLBgQLCgQLDgQLE | |||
|
3310 | gQLFgQLGgQLHgQLIgQLJgQLKgQLLgQLMgQLNgQLOgQLPgQLQgQLRgQLSgQLTgQLUgQLVgQLWgQLXgQLY | |||
|
3311 | gQLZgQLagQLbgQLcgQLdgQLegQLfgQLggQLhgQLigQLjgQLkgQLlgQLmgQLngQLogQLpgQLqgQLrgQLs | |||
|
3312 | gQLtgQLugQLvgQLwgQLxgQLygQLzgQL0gQL1gQL2gQL3gQL4gQL5EQGrEQFfENMRAWUQfxBQEQGYEQGc | |||
|
3313 | EHwQOhDKEMUQfREBuREBXBBOEOAQ4xBXEMwQ8REBWxDkEQFaEFYQ4RAdEBgRASkQUhEBvRDHEGcQ4hEB | |||
|
3314 | lxEBXRDdEIgQUxDOEI4QwRCGEN8RAbwRAScRAVgRAWkRAXQRAYERAXEQ6xEBpRBvEEkQTRCDEI8RAaMR | |||
|
3315 | AWoRAXUQBRATEMYQSBEBtBDpEJUQ0REBWREBmRDNEQGWEDkRAZ0QwxEBaxA4EMkQ2RDSENYRAW0RAbUQ | |||
|
3316 | XBEBuBEBKhEBmxDwEOwQyBEBmhEBYxAXENcQ2hDLEQGiEOgRAWgQcBCRENUQJxEBbxCQEQFuEQEsEQFk | |||
|
3317 | EQGeEEsRAa0RAaQQ0BCWEO8Q2xEBoBEBrBD1EGoRAWIRAb4Q2BCBEQFeEQEoENwRASsRAXAQfhEBbBDU | |||
|
3318 | EM8RAaYRAXYT//////////0QJREBnxDmEQFzEQGhEIIQShEBchDeEQGoEOcQxBBREE/SAA4APgBpC7mA | |||
|
3319 | NKDSAA4APgYAC7yBAYeg0gAOAD4GAAu/gQGHoNIANwA4C8ELwqILwgA7Xk5TSUJPYmplY3REYXRhAAgA | |||
|
3320 | GQAiACcAMQA6AD8ARABSAFQAZgZmBmwGtwa+BsUG0wblBwEHDwcbBycHNQdAB04Hagd4B4sHnQe3B8EH | |||
|
3321 | zgfQB9MH1gfZB9wH3gfhB+MH5gfpB+wH7wfxB/MH9gf5B/wH/wgICBQIFggYCCYILwg4CEMISAhXCGAI | |||
|
3322 | cwh8CIcIiQiMCI4IuwjICNUI6wj5CQMJEQkeCTAJRAlQCVIJVAlWCVgJWglfCWEJYwllCWcJaQmECZcJ | |||
|
3323 | oAm9Cc8J2gnjCe8J+wn9Cf8KAQoECgYKCAoKChMKFQoaChwKHgpHCk8KXgptCnoKfAp+CoAKggqFCocK | |||
|
3324 | iQqLCowKlQqXCpwKngqgCtkK4wrvCv0LCgsUCyYLNAs2CzgLOgs8Cz0LPwtBC0MLRQtHC0kLSwtNC1YL | |||
|
3325 | WAtbC10Legt8C34LgAuCC4QLhguPC5ELlAuWC8cL0wvcC+gL9gv4C/oL/Av+DAEMAwwFDAcMCQwLDA0M | |||
|
3326 | FgwYDB8MIQwjDCUMWgxjDGwMdgyADIoMjAyODJAMkgyUDJYMmAybDJ0MnwyhDKMMpQyuDLAMswy1DOoM | |||
|
3327 | /A0GDRMNHw0pDTINPQ0/DUENQw1FDUcNSQ1LDU4NUA1SDVQNVg1YDWENYw2IDYoNjA2ODZANkg2UDZYN | |||
|
3328 | mA2aDZwNng2gDaINpA2mDagNqg3GDdsN+A4ZDjUOWw6BDp8Ouw7XDvQPDA8mD1oPdw+TD8APyQ/QD90P | |||
|
3329 | 4w/6EA8QGRAkECwQPhBAEEIQSxBNEGIQdRCDEI0QjxCREJMQlRCiEKsQrRCvELEQuhDEEMYQxxDQENcQ | |||
|
3330 | 6RDyEPsRFxEsETURNxE6ETwRRRFMEVsRYxFsEXERehF/EaARqBHCEdUR6RIAEhUSKBIqEi8SMRIzEjUS | |||
|
3331 | NxI5EjsSSBJVElsSXRJ4EoEShhKOEpsSoxKlEqcSqhK3Er8SwRLGEsgSyhLPEtES0xLoEvQTAhMEEwYT | |||
|
3332 | CBMKExETLxM8Ez4TShNfE2ETYxNlE2cTexOEE4kTlhOjE6UTqhOsE64TsxO1E7cTwxPQE9IT2RPiE+cT | |||
|
3333 | /hQLFBMUHBQnFC4UNRRBFFgUcBR9FH8UghSPFJkUphSoFKoUshS7FMAUyRTSFN0VAhULFRQVHhUgFSIV | |||
|
3334 | JBUmFS8VMRUzFTUVPhVWFWMVbBV3FYIVjBW5FcQVxhXIFcoVzBXOFdAV0hXbFeQV/xYYFiEWKhY3Fk4W | |||
|
3335 | VxZeFmkWcBaNFpkWpBauFrsWxxbMFs4W0BbSFtQW1hbeFu8W9hb9FwYXCBcRFxMXFhcjFywXMRc4F00X | |||
|
3336 | TxdRF1MXVRdrF3gXeheIF5EXmhesF7kXwBfJF9IX2BgRGBMYFRgXGBkYGhgcGB4YIBgiGCQYJhgvGDEY | |||
|
3337 | NBg2GFMYVRhXGFkYWxhdGF8YaBhqGG0YbxiuGLsYzhjbGN0Y3xjhGOMY5RjnGOkY6xj+GQAZAhkEGQYZ | |||
|
3338 | CBkRGRMZHhkgGSIZJBkmGSgZVRlXGVkZWxldGV8ZYRljGWUZZxlwGXIZdRl3Gc4Z8Bn6GgcaHBo2GlIa | |||
|
3339 | bRp3GoMalRqkGsMazxrRGtMa3BreGuAa4RrjGuwa9Rr3Gvga+hr8Gv4bABsJGxQbMRs9Gz8bQRtDG0Ub | |||
|
3340 | RxtJG3YbeBt6G3wbfhuAG4IbhBuGG4gbkhubG6QbuBvRG9Mb1RvXG9kb2xvyG/scBBwSHBscHRwiHCQc | |||
|
3341 | JhxPHF4caxx2HIUckBybHKgcqRyrHK0cthy4HMEcyhzLHM0c6hzvHPEc8xz1HPcc+R0CHQ8dER0dHTId | |||
|
3342 | NB02HTgdOh1MHVUdYB10HZUdox2oHaodrB2uHbAdsh21HbcdwR3SHdQd3R3fHeId9x35Hfsd/R3/Hhge | |||
|
3343 | LR4vHjEeMx41HkgeUR5WHmQejR6OHpAekh6bHp0enh6gHr0evx7BHsMexR7HHs0e7h7wHvIe9B72Hvge | |||
|
3344 | +h8PHxEfEx8VHxcfIR8uHzAfNR8+H0kfYR+GH4gfih+MH44fkB+SH5QfnR+2H98f4R/jH+Uf5x/pH+sf | |||
|
3345 | 7R/2IA4gFyAZIBwgHiA0IE0gZCB9IJognCCeIKAgoiCkIK4guyC9INYg+SECIQshFyFAIUshViFgIW0h | |||
|
3346 | byFxIXMhfCGFIYghiiGNIY8hkSGWIZghoSGmIbEhySHSIdsh8SH8IhQiJyIwIjUiSCJRIlMitCK2Irgi | |||
|
3347 | uiK8Ir4iwCLCIsQixiLIIsoizCLOItAi0yLWItki3CLfIuIi5SLoIusi7iLxIvQi9yL6Iv0jACMDIwYj | |||
|
3348 | CSMMIw8jEiMVIxgjGyMeIyEjJCMnIyojLSMwIzMjQCNJI1EjUyNVI1cjfCOEI5gjoyOxI7sjyCPPI9Uj | |||
|
3349 | 1yPZI94j4CPlI+cj6SPrI/gkBCQHJAokDSQaJBwkKSQ4JDokPCQ+JEYkWCRhJGYkeSSGJIgkiiSMJJ8k | |||
|
3350 | qCStJLgk3CTlJOwlBCUTJSAlIiUkJSYlRyVJJUslTSVPJVElUyVgJWMlZiVpJX0lfyWfJawlriWwJbIl | |||
|
3351 | 1yXZJdsl3SXfJeEl4yX2JfgmEyYgJiImJCYmJkcmSSZLJk0mTyZRJlMmYCZjJmYmaSZuJnAmfiaLJo0m | |||
|
3352 | jyaRJrImtCa2Jrgmuia8Jr4myybOJtEm1CbZJtsm4SbuJvAm8ib0JxUnFycZJx4nICciJyQnJicrJy0n | |||
|
3353 | MydAJ0InRCdGJ2cnaSdrJ3Ancid0J3YneCeJJ4wnjyeSJ5UnoSejJ7wnySfLJ80nzyfwJ/In9Cf2J/gn | |||
|
3354 | +if8KAkoDCgPKBIoHiggKDgoRShHKEkoSyhsKG4ocChyKHQodih4KH4ogCiHKJQoliiYKJoovyjBKMMo | |||
|
3355 | xSjHKMkoyyjWKPAo/Sj/KQEpAykkKSYpKCkqKSwpLikwKT0pQClDKUYpVCliKXMpgSmDKYUphymJKZIp | |||
|
3356 | lCmWKa8puCnBKcgp3ynsKe4p8CnyKhMqFSoXKhkqGyodKh8qJiouKjsqPSo/KkIqYyplKmcqaipsKm4q | |||
|
3357 | cCqBKoQqhyqKKo0qliqYKq4quyq9KsAqwyrkKuYq6SrrKu0q7yrxKwYrGCslKycrKistK04rUCtTK1Ur | |||
|
3358 | VytZK1srZCt9K4orjCuPK5Irsyu1K7gruyu9K78rwSvHK8kr1yvoK+or7CvvK/IsDywRLBQsFiwYLBos | |||
|
3359 | HCw0LFQsYSxjLGYsaSyKLIwsjyySLJQsliyZLKYsqSysLK8svizALM8s3CzeLOEs5C0FLQctCi0NLQ8t | |||
|
3360 | ES0TLR4tIC0rLTgtOi09LUAtYS1jLWYtaC1qLWwtbi2FLYstmC2aLZ0toC3BLcMtxi3ILcotzC3PLe0u | |||
|
3361 | Di4bLh0uIC4jLkQuRi5JLkwuTi5QLlIuXy5hLmgudS53LnoufS6eLqAuoy6mLqguqi6sLr0uvy7RLt4u | |||
|
3362 | 4C7jLuYvBy8JLwwvDy8RLxMvFS8sLy4vOS9GL0gvSy9OL3MvdS94L3svfS9/L4EvjS+PL68vwC/CL8Qv | |||
|
3363 | xy/KL9Mv1S/YL/UwCTAWMBgwGzAeMD8wQTBEMEYwSDBKMEwwUTBeMGswbTBwMHMwlDCWMJkwnDCeMKAw | |||
|
3364 | ojCnMKkwrzC8ML4wwTDEMOUw5zDqMO0w7zDxMPQxATEEMQcxCjEXMRkxLzFAMUIxRTFIMUoxUzFVMVcx | |||
|
3365 | ZDFmMWkxbDGNMY8xkjGUMZYxmDGaMakxuDHFMccxyjHNMe4x8DHzMfYx+DH6Mf0yCjINMhAyEzIqMiwy | |||
|
3366 | NjJDMkUySDJLMmwybjJxMnMydTJ3MnoyizKOMpEylDKXMqIyujLHMskyzDLPMvAy8jL1Mvcy+TL7Mv4z | |||
|
3367 | JTNHM1QzVjNZM1wzfTN/M4IzhTOHM4kzizOPM5EzljOnM6kzqzOtM7AzuTPKM8wzzjPQM9Mz6zP4M/oz | |||
|
3368 | /TQANCU0LzQxNDM0NjQ5NDs0PTQ/NE00TzReNGs0bTRwNHM0lDSWNJk0nDSeNKA0ozTANMI01DThNOM0 | |||
|
3369 | 5jTpNQY1CDULNQ01DzURNRM1JTU+NUs1TTVQNVM1dDV2NXk1ezV9NX81gjWgNbk11jXgNeo2CTYMNg82 | |||
|
3370 | EjYVNhc2GjZHNmQ2ezaINpM2ojaxNtY28TcKNx43HzciNyM3JjcnNyo3LTcuNy83MDczNzw3PjdFN0g3 | |||
|
3371 | SzdON1M3VzddN2Y3aTdsN283gDeGN5E3nTegN6M3pjenN7A3uTe+N9E32jffN+g38zgMOCA4NThCOF84 | |||
|
3372 | dTh+OIU4nTi6OL04vzjCOMU4yDjLOOc4+zkCOR85IjklOSg5KzktOTA5TzlnOYQ5hzmKOY05kDmTOZY5 | |||
|
3373 | wjnUOe86DDoPOhE6FDoXOhk6HDo4OkA6UzpcOl87MDsyOzU7ODs6Ozw7PztCO0Q7RztKO007UDtTO1Y7 | |||
|
3374 | WTtbO147YTtkO2c7aTtrO247cTt0O3c7ejt9O4A7gjuFO4c7ijuNO5A7kzuWO5g7mzueO6E7pDunO6k7 | |||
|
3375 | rDuuO7A7sju0O7Y7uDu6O7w7vzvCO8U7xzvKO8070DvSO9U72DvaO9w73jvhO+M75TvoO+o77TvwO/I7 | |||
|
3376 | 9Dv2O/g7+zv+PAE8BDwGPAk8DDwPPBI8FDwXPBk8HDwfPCE8IzwlPCg8KjwsPC48MTw0PDc8OTw8PGU8 | |||
|
3377 | bzxxPHM8djx4PHo8fDx+PIE8iDyXPKA8ojynPKo8rDy1PLo84zzlPOg86zztPO888TzzPPY9Aj0LPQ09 | |||
|
3378 | ED0TPSw9VT1XPVk9XD1ePWA9Yj1kPWc9dT1+PYA9hz2JPYs9jj2fPaI9pT2oPas9tT2+PcA9zz3SPdU9 | |||
|
3379 | 2D3bPd494T3kPg0+Dz4RPhQ+Fj4YPho+HT4gPjI+Oz49PlQ+Vz5aPl0+YD5jPmY+aT5rPm4+cT50Pp0+ | |||
|
3380 | qz64Pro+vD69Pr8+wD7CPsQ+xj7nPuk+7D7vPvE+8z71Pw4/ED85Pzs/PT8+P0A/QT9DP0U/Rz9wP3I/ | |||
|
3381 | dT94P3o/fD9+P4A/gz+MP50/oD+jP6Y/qT+yP7Q/tT/HP/A/8j/0P/U/9z/4P/o//D/+QCdAKUArQCxA | |||
|
3382 | LkAvQDFAM0A1QEJAa0BtQG9AckB0QHZAeEB7QH5Ag0CMQI5ApUCoQKtArkCxQLRAtkC5QLxAv0DCQMVA | |||
|
3383 | 5kDoQOtA7kDwQPJA9ED4QPpBG0EdQSBBI0ElQSdBKUE0QTZBX0FhQWNBZEFmQWdBaUFrQW1BlkGYQZpB | |||
|
3384 | m0GdQZ5BoEGiQaRBzUHPQdFB1EHWQdhB2kHdQeBB5UHuQfBCC0INQg9CEkIVQhhCGkIcQh9CIkIlQihC | |||
|
3385 | K0IuQldCWUJbQlxCXkJfQmFCY0JlQo5CkEKSQpNClUKWQphCmkKcQsVCx0LJQsxCzkLQQtJC1ELXQtxC | |||
|
3386 | 5ULnQvJC9EL3QvpC/UL/QyRDJkMpQytDLUMvQzFDO0NgQ2JDZUNoQ2pDbENuQ3xDoUOjQ6ZDqUOrQ61D | |||
|
3387 | r0OxQ8pDzEP1Q/dD+kP9Q/9EAUQDRAVECEQfRChEKkQzRDZEOUQ8RD9EaERqRGxEb0RxRHNEdUR4RHtE | |||
|
3388 | gkSLRI1EkkSVRJdEuES6RL1EwETCRMRExkTRRPpE/ET/RQJFBEUGRQhFC0UORRNFHEUeRSNFJkUpRVJF | |||
|
3389 | VEVWRVlFW0VdRV9FYkVlRWxFdUV3RYBFgkWFRYhFi0W0RbZFuEW5RbtFvEW+RcBFwkXRRfpF/EX/RgJG | |||
|
3390 | BEYGRghGC0YORhNGHEYeRiFGJEYwRjlGPEcNRw9HEUcTRxVHF0cZRxtHHUcfRyJHJEcmRylHLEcuRzFH | |||
|
3391 | NEc2RzhHO0c9R0BHQkdER0dHSUdLR05HUEdSR1RHVkdZR1tHXUdfR2FHY0dlR2dHakdsR25HcEdyR3RH | |||
|
3392 | dkd4R3tHfUeAR4JHhEeHR4pHjUePR5FHk0eWR5hHmkedR59HoUejR6VHp0epR6tHrUevR7FHtEe2R7hH | |||
|
3393 | uke8R75HwEfDR8VHyEfKR8xHzkfQR9NH1kfZR9xH30fhR+NH5UfnR+lH60fuR/BH8kf1R/dIAEgDSNZI | |||
|
3394 | 2EjbSN5I4EjiSOVI6EjqSO1I8EjzSPZI+Uj8SP9JAkkESQdJCkkNSQ9JEUkUSRdJGkkdSSBJI0kmSShJ | |||
|
3395 | K0ktSTBJM0k2STlJPEk+SUFJRElHSUpJTUlPSVJJVElWSVhJWklcSV5JYEliSWVJaElrSW1JcElzSXZJ | |||
|
3396 | eEl7SX5JgEmCSYRJh0mJSYtJjkmQSZNJlkmYSZpJnEmeSaFJpEmnSapJrEmvSbJJtEm3SbpJvUm/ScJJ | |||
|
3397 | xEnHSclJy0nNSdBJ0knUSdZJ2UncSd9J4UnkSe1J8ErDSsZKyUrMSs9K0krVSthK20reSuFK5ErnSupK | |||
|
3398 | 7UrwSvNK9kr5SvxK/0sCSwVLCEsLSw5LEUsUSxdLGksdSyBLI0smSylLLEsvSzJLNUs4SztLPktBS0RL | |||
|
3399 | R0tKS01LUEtTS1ZLWUtcS19LYktlS2hLa0tuS3FLdEt3S3pLfUuAS4NLhkuJS4xLj0uSS5VLmEubS55L | |||
|
3400 | oUukS6dLqkutS7BLs0u2S7lLvEu/S8JLxUvIS8tLzkvRS9RL10vaS91L4EvjS+ZL6UvsS+9L8kv1S/hL | |||
|
3401 | +0wWTCtMLUxBTFtMdUyZTK5MwUzWTNhM9E0rTVVNcE15TYdNiU2bTZ1NqU3ATeVN6k39TglOLE4/TlhO | |||
|
3402 | ZU6BToxOr06zTrVOzE7YTuJPA08YTz1PVk9jT29PlE+uT8JPzk/nT/lQFVAsUEpQZ1B6UJpQplCwUO9R | |||
|
3403 | DlEaUThRTlFlUXhRi1GfUbdRulHUUfBR/FIKUipSLFI6UlJSaVJ8UqZStFK2UtBS3VMAUwRTEFMvU0RT | |||
|
3404 | UFNpU3dTkVOkU7BTzlPqVABUBFQWVDNUP1RBVEpUTVROVFdUWlRbVGRUZ1WYVZtVnVWgVaNVplWpVatV | |||
|
3405 | rVWwVbNVtVW4VbtVvlXBVcRVx1XJVcxVz1XRVdRV11XaVd1V4FXjVeVV6FXrVe5V8VX0VfZV+FX6Vf1W | |||
|
3406 | AFYDVgZWCVYMVg9WEVYUVhdWGlYcVh5WIVYkViZWKFYrVi5WMVY0VjdWOVY7Vj5WQVZEVkdWSlZMVk9W | |||
|
3407 | UlZUVlZWWFZaVlxWXlZgVmJWZVZoVmtWblZwVnNWdlZ5VnxWf1aCVoRWh1aKVo1Wj1aRVpNWlVaYVppW | |||
|
3408 | nFafVqJWpVanVqpWrVawVrNWtla4VrpWvFa+VsBWwlbFVshWy1bOVtBW01bVVthW21bdVuBW41blVuhW | |||
|
3409 | 6lbtVu9W8lb1VvdW+Vb7Vv5XAVcDVwVXCFcKVwxXD1cSVxVXGFcbVx1XIFciVyVXLlcxWGJYZVhoWGtY | |||
|
3410 | blhxWHRYd1h6WH1YgFiDWIZYiViMWI9YkliVWJhYm1ieWKFYpFinWKpYrViwWLNYtli5WLxYv1jCWMVY | |||
|
3411 | yFjLWM5Y0VjUWNdY2ljdWOBY41jmWOlY7FjvWPJY9Vj4WPtY/lkBWQRZB1kKWQ1ZEFkTWRZZGVkcWR9Z | |||
|
3412 | IlklWShZK1kuWTFZNFk3WTpZPVlAWUNZRllJWUxZT1lSWVVZWFlbWV5ZYVlkWWdZalltWXBZc1l2WXlZ | |||
|
3413 | fFl/WYJZhVmIWYtZjlmRWZRZl1maWZ1ZoFmjWaZZqVmsWa9Zslm1WbhZu1m+WcFZxFnHWcpZzVnQWdNZ | |||
|
3414 | 1lnZWdxZ31niWeVZ6FnrWe5Z8Vn0WfdZ+ln9WgBaA1oGWglaDFoPWhJaFVoYWhtaHlohWiRaJ1oqWi1a | |||
|
3415 | L1oyWjRaNlo5WjxaPlpAWkJaRFpGWklaTFpOWlBaUlpUWlZaWFpbWl1aYFpiWmRaZlpoWmtabVpwWnJa | |||
|
3416 | dFp2WnlafFp+WoBaglqEWoZaiFqKWoxaj1qSWpVamFqbWp5aoVqjWqZaqFqqWqxarlqwWrNatlq5Wrta | |||
|
3417 | vVq/WsFaxFrGWshaylrNWtBa0lrVWtda2lrcWt9a4VrjWuVa51rpWuxa71rxWvRa91r6Wvxa/lsAWwNb | |||
|
3418 | BlsIWwpbDFsOWxFbE1sWWxhbGlscWx5bIVsjWyZbKVssWy9bMVs0WzdbOVs7Wz1bP1tCW0VbR1tJW0xb | |||
|
3419 | T1tRW1NbVltZW1tbXlthW2NbZltoW2pbbVtwW3lbe1t+W4Bbg1uGW4hbiluNW49bkluUW5ZbmFuaW6Nb | |||
|
3420 | pVumW69bsluzW7xbv1vAW8lbzgAAAAAAAAICAAAAAAAAC8MAAAAAAAAAAAAAAAAAAFvdA</bytes> | |||
|
3421 | </object> | |||
|
3422 | </data> | |||
|
3423 | </archive> |
@@ -0,0 +1,293 b'' | |||||
|
1 | // !$*UTF8*$! | |||
|
2 | { | |||
|
3 | archiveVersion = 1; | |||
|
4 | classes = { | |||
|
5 | }; | |||
|
6 | objectVersion = 44; | |||
|
7 | objects = { | |||
|
8 | ||||
|
9 | /* Begin PBXBuildFile section */ | |||
|
10 | 77631A270C06C501005415CB /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 77631A260C06C501005415CB /* Python.framework */; }; | |||
|
11 | 77631A3F0C0748CF005415CB /* main.py in Resources */ = {isa = PBXBuildFile; fileRef = 77631A3E0C0748CF005415CB /* main.py */; }; | |||
|
12 | 7790198F0C07548A00326F66 /* IPython1SandboxAppDelegate.py in Resources */ = {isa = PBXBuildFile; fileRef = 7790198E0C07548A00326F66 /* IPython1SandboxAppDelegate.py */; }; | |||
|
13 | 77C8C1F90C07829500965286 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 77C8C1F70C07829500965286 /* MainMenu.xib */; }; | |||
|
14 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; | |||
|
15 | 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; | |||
|
16 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; | |||
|
17 | /* End PBXBuildFile section */ | |||
|
18 | ||||
|
19 | /* Begin PBXFileReference section */ | |||
|
20 | 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; | |||
|
21 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | |||
|
22 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; | |||
|
23 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; | |||
|
24 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; | |||
|
25 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; | |||
|
26 | 32CA4F630368D1EE00C91783 /* IPython1Sandbox_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IPython1Sandbox_Prefix.pch; sourceTree = "<group>"; }; | |||
|
27 | 4CA32F870D8879B100311764 /* IPythonCocoaController Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "IPythonCocoaController Tests-Info.plist"; sourceTree = "<group>"; }; | |||
|
28 | 77631A260C06C501005415CB /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Python.framework; path = /System/Library/Frameworks/Python.framework; sourceTree = "<absolute>"; }; | |||
|
29 | 77631A3E0C0748CF005415CB /* main.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = main.py; sourceTree = "<group>"; }; | |||
|
30 | 7790198E0C07548A00326F66 /* IPython1SandboxAppDelegate.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = IPython1SandboxAppDelegate.py; sourceTree = "<group>"; }; | |||
|
31 | 77C8C1F80C07829500965286 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; }; | |||
|
32 | 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||
|
33 | 8D1107320486CEB800E47090 /* IPython1Sandbox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IPython1Sandbox.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
|
34 | /* End PBXFileReference section */ | |||
|
35 | ||||
|
36 | /* Begin PBXFrameworksBuildPhase section */ | |||
|
37 | 8D11072E0486CEB800E47090 /* Frameworks */ = { | |||
|
38 | isa = PBXFrameworksBuildPhase; | |||
|
39 | buildActionMask = 2147483647; | |||
|
40 | files = ( | |||
|
41 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, | |||
|
42 | 77631A270C06C501005415CB /* Python.framework in Frameworks */, | |||
|
43 | ); | |||
|
44 | runOnlyForDeploymentPostprocessing = 0; | |||
|
45 | }; | |||
|
46 | /* End PBXFrameworksBuildPhase section */ | |||
|
47 | ||||
|
48 | /* Begin PBXGroup section */ | |||
|
49 | 080E96DDFE201D6D7F000001 /* Classes */ = { | |||
|
50 | isa = PBXGroup; | |||
|
51 | children = ( | |||
|
52 | 7790198E0C07548A00326F66 /* IPython1SandboxAppDelegate.py */, | |||
|
53 | ); | |||
|
54 | name = Classes; | |||
|
55 | sourceTree = "<group>"; | |||
|
56 | }; | |||
|
57 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { | |||
|
58 | isa = PBXGroup; | |||
|
59 | children = ( | |||
|
60 | 77631A260C06C501005415CB /* Python.framework */, | |||
|
61 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, | |||
|
62 | ); | |||
|
63 | name = "Linked Frameworks"; | |||
|
64 | sourceTree = "<group>"; | |||
|
65 | }; | |||
|
66 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { | |||
|
67 | isa = PBXGroup; | |||
|
68 | children = ( | |||
|
69 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */, | |||
|
70 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, | |||
|
71 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */, | |||
|
72 | ); | |||
|
73 | name = "Other Frameworks"; | |||
|
74 | sourceTree = "<group>"; | |||
|
75 | }; | |||
|
76 | 19C28FACFE9D520D11CA2CBB /* Products */ = { | |||
|
77 | isa = PBXGroup; | |||
|
78 | children = ( | |||
|
79 | 8D1107320486CEB800E47090 /* IPython1Sandbox.app */, | |||
|
80 | ); | |||
|
81 | name = Products; | |||
|
82 | sourceTree = "<group>"; | |||
|
83 | }; | |||
|
84 | 29B97314FDCFA39411CA2CEA /* IPython1Sandbox */ = { | |||
|
85 | isa = PBXGroup; | |||
|
86 | children = ( | |||
|
87 | 080E96DDFE201D6D7F000001 /* Classes */, | |||
|
88 | 29B97315FDCFA39411CA2CEA /* Other Sources */, | |||
|
89 | 29B97317FDCFA39411CA2CEA /* Resources */, | |||
|
90 | 29B97323FDCFA39411CA2CEA /* Frameworks */, | |||
|
91 | 19C28FACFE9D520D11CA2CBB /* Products */, | |||
|
92 | 4CA32F870D8879B100311764 /* IPythonCocoaController Tests-Info.plist */, | |||
|
93 | ); | |||
|
94 | name = IPython1Sandbox; | |||
|
95 | sourceTree = "<group>"; | |||
|
96 | }; | |||
|
97 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { | |||
|
98 | isa = PBXGroup; | |||
|
99 | children = ( | |||
|
100 | 32CA4F630368D1EE00C91783 /* IPython1Sandbox_Prefix.pch */, | |||
|
101 | 29B97316FDCFA39411CA2CEA /* main.m */, | |||
|
102 | 77631A3E0C0748CF005415CB /* main.py */, | |||
|
103 | ); | |||
|
104 | name = "Other Sources"; | |||
|
105 | sourceTree = "<group>"; | |||
|
106 | }; | |||
|
107 | 29B97317FDCFA39411CA2CEA /* Resources */ = { | |||
|
108 | isa = PBXGroup; | |||
|
109 | children = ( | |||
|
110 | 77C8C1F70C07829500965286 /* MainMenu.xib */, | |||
|
111 | 8D1107310486CEB800E47090 /* Info.plist */, | |||
|
112 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, | |||
|
113 | ); | |||
|
114 | name = Resources; | |||
|
115 | sourceTree = "<group>"; | |||
|
116 | }; | |||
|
117 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { | |||
|
118 | isa = PBXGroup; | |||
|
119 | children = ( | |||
|
120 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, | |||
|
121 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, | |||
|
122 | ); | |||
|
123 | name = Frameworks; | |||
|
124 | sourceTree = "<group>"; | |||
|
125 | }; | |||
|
126 | /* End PBXGroup section */ | |||
|
127 | ||||
|
128 | /* Begin PBXNativeTarget section */ | |||
|
129 | 8D1107260486CEB800E47090 /* IPython1Sandbox */ = { | |||
|
130 | isa = PBXNativeTarget; | |||
|
131 | buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "IPython1Sandbox" */; | |||
|
132 | buildPhases = ( | |||
|
133 | 8D1107290486CEB800E47090 /* Resources */, | |||
|
134 | 8D11072C0486CEB800E47090 /* Sources */, | |||
|
135 | 8D11072E0486CEB800E47090 /* Frameworks */, | |||
|
136 | ); | |||
|
137 | buildRules = ( | |||
|
138 | ); | |||
|
139 | dependencies = ( | |||
|
140 | ); | |||
|
141 | name = IPython1Sandbox; | |||
|
142 | productInstallPath = "$(HOME)/Applications"; | |||
|
143 | productName = IPython1Sandbox; | |||
|
144 | productReference = 8D1107320486CEB800E47090 /* IPython1Sandbox.app */; | |||
|
145 | productType = "com.apple.product-type.application"; | |||
|
146 | }; | |||
|
147 | /* End PBXNativeTarget section */ | |||
|
148 | ||||
|
149 | /* Begin PBXProject section */ | |||
|
150 | 29B97313FDCFA39411CA2CEA /* Project object */ = { | |||
|
151 | isa = PBXProject; | |||
|
152 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "IPython1Sandbox" */; | |||
|
153 | compatibilityVersion = "Xcode 3.0"; | |||
|
154 | hasScannedForEncodings = 1; | |||
|
155 | mainGroup = 29B97314FDCFA39411CA2CEA /* IPython1Sandbox */; | |||
|
156 | projectDirPath = ""; | |||
|
157 | projectRoot = ""; | |||
|
158 | targets = ( | |||
|
159 | 8D1107260486CEB800E47090 /* IPython1Sandbox */, | |||
|
160 | ); | |||
|
161 | }; | |||
|
162 | /* End PBXProject section */ | |||
|
163 | ||||
|
164 | /* Begin PBXResourcesBuildPhase section */ | |||
|
165 | 8D1107290486CEB800E47090 /* Resources */ = { | |||
|
166 | isa = PBXResourcesBuildPhase; | |||
|
167 | buildActionMask = 2147483647; | |||
|
168 | files = ( | |||
|
169 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, | |||
|
170 | 77631A3F0C0748CF005415CB /* main.py in Resources */, | |||
|
171 | 7790198F0C07548A00326F66 /* IPython1SandboxAppDelegate.py in Resources */, | |||
|
172 | 77C8C1F90C07829500965286 /* MainMenu.xib in Resources */, | |||
|
173 | ); | |||
|
174 | runOnlyForDeploymentPostprocessing = 0; | |||
|
175 | }; | |||
|
176 | /* End PBXResourcesBuildPhase section */ | |||
|
177 | ||||
|
178 | /* Begin PBXSourcesBuildPhase section */ | |||
|
179 | 8D11072C0486CEB800E47090 /* Sources */ = { | |||
|
180 | isa = PBXSourcesBuildPhase; | |||
|
181 | buildActionMask = 2147483647; | |||
|
182 | files = ( | |||
|
183 | 8D11072D0486CEB800E47090 /* main.m in Sources */, | |||
|
184 | ); | |||
|
185 | runOnlyForDeploymentPostprocessing = 0; | |||
|
186 | }; | |||
|
187 | /* End PBXSourcesBuildPhase section */ | |||
|
188 | ||||
|
189 | /* Begin PBXVariantGroup section */ | |||
|
190 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { | |||
|
191 | isa = PBXVariantGroup; | |||
|
192 | children = ( | |||
|
193 | 089C165DFE840E0CC02AAC07 /* English */, | |||
|
194 | ); | |||
|
195 | name = InfoPlist.strings; | |||
|
196 | sourceTree = "<group>"; | |||
|
197 | }; | |||
|
198 | 77C8C1F70C07829500965286 /* MainMenu.xib */ = { | |||
|
199 | isa = PBXVariantGroup; | |||
|
200 | children = ( | |||
|
201 | 77C8C1F80C07829500965286 /* English */, | |||
|
202 | ); | |||
|
203 | name = MainMenu.xib; | |||
|
204 | sourceTree = "<group>"; | |||
|
205 | }; | |||
|
206 | /* End PBXVariantGroup section */ | |||
|
207 | ||||
|
208 | /* Begin XCBuildConfiguration section */ | |||
|
209 | C01FCF4B08A954540054247B /* Debug */ = { | |||
|
210 | isa = XCBuildConfiguration; | |||
|
211 | buildSettings = { | |||
|
212 | COPY_PHASE_STRIP = NO; | |||
|
213 | CURRENT_PROJECT_VERSION = 1; | |||
|
214 | GCC_DYNAMIC_NO_PIC = NO; | |||
|
215 | GCC_ENABLE_FIX_AND_CONTINUE = YES; | |||
|
216 | GCC_MODEL_TUNING = G5; | |||
|
217 | GCC_OPTIMIZATION_LEVEL = 0; | |||
|
218 | GCC_PRECOMPILE_PREFIX_HEADER = YES; | |||
|
219 | GCC_PREFIX_HEADER = IPython1Sandbox_Prefix.pch; | |||
|
220 | INFOPLIST_FILE = Info.plist; | |||
|
221 | INSTALL_PATH = "$(HOME)/Applications"; | |||
|
222 | PRODUCT_NAME = IPython1Sandbox; | |||
|
223 | VERSIONING_SYSTEM = "apple-generic"; | |||
|
224 | WRAPPER_EXTENSION = app; | |||
|
225 | ZERO_LINK = YES; | |||
|
226 | }; | |||
|
227 | name = Debug; | |||
|
228 | }; | |||
|
229 | C01FCF4C08A954540054247B /* Release */ = { | |||
|
230 | isa = XCBuildConfiguration; | |||
|
231 | buildSettings = { | |||
|
232 | CURRENT_PROJECT_VERSION = 1; | |||
|
233 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | |||
|
234 | GCC_MODEL_TUNING = G5; | |||
|
235 | GCC_PRECOMPILE_PREFIX_HEADER = YES; | |||
|
236 | GCC_PREFIX_HEADER = IPython1Sandbox_Prefix.pch; | |||
|
237 | INFOPLIST_FILE = Info.plist; | |||
|
238 | INSTALL_PATH = "$(HOME)/Applications"; | |||
|
239 | PRODUCT_NAME = IPython1Sandbox; | |||
|
240 | VERSIONING_SYSTEM = "apple-generic"; | |||
|
241 | WRAPPER_EXTENSION = app; | |||
|
242 | }; | |||
|
243 | name = Release; | |||
|
244 | }; | |||
|
245 | C01FCF4F08A954540054247B /* Debug */ = { | |||
|
246 | isa = XCBuildConfiguration; | |||
|
247 | buildSettings = { | |||
|
248 | GCC_WARN_ABOUT_RETURN_TYPE = YES; | |||
|
249 | GCC_WARN_UNUSED_VARIABLE = YES; | |||
|
250 | PREBINDING = NO; | |||
|
251 | SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; | |||
|
252 | }; | |||
|
253 | name = Debug; | |||
|
254 | }; | |||
|
255 | C01FCF5008A954540054247B /* Release */ = { | |||
|
256 | isa = XCBuildConfiguration; | |||
|
257 | buildSettings = { | |||
|
258 | ARCHS = ( | |||
|
259 | ppc, | |||
|
260 | i386, | |||
|
261 | ); | |||
|
262 | GCC_WARN_ABOUT_RETURN_TYPE = YES; | |||
|
263 | GCC_WARN_UNUSED_VARIABLE = YES; | |||
|
264 | PREBINDING = NO; | |||
|
265 | SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; | |||
|
266 | }; | |||
|
267 | name = Release; | |||
|
268 | }; | |||
|
269 | /* End XCBuildConfiguration section */ | |||
|
270 | ||||
|
271 | /* Begin XCConfigurationList section */ | |||
|
272 | C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "IPython1Sandbox" */ = { | |||
|
273 | isa = XCConfigurationList; | |||
|
274 | buildConfigurations = ( | |||
|
275 | C01FCF4B08A954540054247B /* Debug */, | |||
|
276 | C01FCF4C08A954540054247B /* Release */, | |||
|
277 | ); | |||
|
278 | defaultConfigurationIsVisible = 0; | |||
|
279 | defaultConfigurationName = Release; | |||
|
280 | }; | |||
|
281 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "IPython1Sandbox" */ = { | |||
|
282 | isa = XCConfigurationList; | |||
|
283 | buildConfigurations = ( | |||
|
284 | C01FCF4F08A954540054247B /* Debug */, | |||
|
285 | C01FCF5008A954540054247B /* Release */, | |||
|
286 | ); | |||
|
287 | defaultConfigurationIsVisible = 0; | |||
|
288 | defaultConfigurationName = Release; | |||
|
289 | }; | |||
|
290 | /* End XCConfigurationList section */ | |||
|
291 | }; | |||
|
292 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; | |||
|
293 | } |
@@ -0,0 +1,39 b'' | |||||
|
1 | # | |||
|
2 | # IPython1SandboxAppDelegate.py | |||
|
3 | # IPython1Sandbox | |||
|
4 | # | |||
|
5 | # Created by Barry Wark on 3/4/08. | |||
|
6 | # Copyright __MyCompanyName__ 2008. All rights reserved. | |||
|
7 | # | |||
|
8 | ||||
|
9 | from Foundation import NSObject, NSPredicate | |||
|
10 | import objc | |||
|
11 | import threading | |||
|
12 | ||||
|
13 | from PyObjCTools import AppHelper | |||
|
14 | ||||
|
15 | from twisted.internet import reactor | |||
|
16 | ||||
|
17 | class IPython1SandboxAppDelegate(NSObject): | |||
|
18 | ipythonController = objc.IBOutlet() | |||
|
19 | ||||
|
20 | def applicationShouldTerminate_(self, sender): | |||
|
21 | if reactor.running: | |||
|
22 | reactor.addSystemEventTrigger( | |||
|
23 | 'after', 'shutdown', AppHelper.stopEventLoop) | |||
|
24 | reactor.stop() | |||
|
25 | return False | |||
|
26 | return True | |||
|
27 | ||||
|
28 | ||||
|
29 | def applicationDidFinishLaunching_(self, sender): | |||
|
30 | reactor.interleave(AppHelper.callAfter) | |||
|
31 | assert(reactor.running) | |||
|
32 | ||||
|
33 | ||||
|
34 | def workspaceFilterPredicate(self): | |||
|
35 | return NSPredicate.predicateWithFormat_("NOT (self.value BEGINSWITH '<')") | |||
|
36 | ||||
|
37 | ||||
|
38 | ||||
|
39 |
@@ -0,0 +1,7 b'' | |||||
|
1 | // | |||
|
2 | // Prefix header for all source files of the 'IPython1Sandbox' target in the 'IPython1Sandbox' project | |||
|
3 | // | |||
|
4 | ||||
|
5 | #ifdef __OBJC__ | |||
|
6 | #import <Cocoa/Cocoa.h> | |||
|
7 | #endif |
@@ -0,0 +1,20 b'' | |||||
|
1 | <?xml version="1.0" encoding="UTF-8"?> | |||
|
2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
|
3 | <plist version="1.0"> | |||
|
4 | <dict> | |||
|
5 | <key>CFBundleDevelopmentRegion</key> | |||
|
6 | <string>English</string> | |||
|
7 | <key>CFBundleExecutable</key> | |||
|
8 | <string>${EXECUTABLE_NAME}</string> | |||
|
9 | <key>CFBundleIdentifier</key> | |||
|
10 | <string>com.yourcompany.IPythonCocoaController Tests</string> | |||
|
11 | <key>CFBundleInfoDictionaryVersion</key> | |||
|
12 | <string>6.0</string> | |||
|
13 | <key>CFBundlePackageType</key> | |||
|
14 | <string>BNDL</string> | |||
|
15 | <key>CFBundleSignature</key> | |||
|
16 | <string>????</string> | |||
|
17 | <key>CFBundleVersion</key> | |||
|
18 | <string>1.0</string> | |||
|
19 | </dict> | |||
|
20 | </plist> |
@@ -0,0 +1,30 b'' | |||||
|
1 | <?xml version="1.0" encoding="UTF-8"?> | |||
|
2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
|
3 | <plist version="1.0"> | |||
|
4 | <dict> | |||
|
5 | <key>CFBundleDevelopmentRegion</key> | |||
|
6 | <string>English</string> | |||
|
7 | <key>CFBundleExecutable</key> | |||
|
8 | <string>${EXECUTABLE_NAME}</string> | |||
|
9 | <key>CFBundleIconFile</key> | |||
|
10 | <string></string> | |||
|
11 | <key>CFBundleIdentifier</key> | |||
|
12 | <string>com.yourcompany.IPython1Sandbox</string> | |||
|
13 | <key>CFBundleInfoDictionaryVersion</key> | |||
|
14 | <string>6.0</string> | |||
|
15 | <key>CFBundleName</key> | |||
|
16 | <string>${PRODUCT_NAME}</string> | |||
|
17 | <key>CFBundlePackageType</key> | |||
|
18 | <string>APPL</string> | |||
|
19 | <key>CFBundleShortVersionString</key> | |||
|
20 | <string>0.1</string> | |||
|
21 | <key>CFBundleSignature</key> | |||
|
22 | <string>????</string> | |||
|
23 | <key>CFBundleVersion</key> | |||
|
24 | <string>1.0</string> | |||
|
25 | <key>NSMainNibFile</key> | |||
|
26 | <string>MainMenu</string> | |||
|
27 | <key>NSPrincipalClass</key> | |||
|
28 | <string>NSApplication</string> | |||
|
29 | </dict> | |||
|
30 | </plist> |
@@ -0,0 +1,49 b'' | |||||
|
1 | // | |||
|
2 | // main.m | |||
|
3 | // IPython1Sandbox | |||
|
4 | // | |||
|
5 | // Created by Barry Wark on 3/4/08. | |||
|
6 | // Copyright __MyCompanyName__ 2008. All rights reserved. | |||
|
7 | // | |||
|
8 | ||||
|
9 | #import <Python/Python.h> | |||
|
10 | #import <Cocoa/Cocoa.h> | |||
|
11 | ||||
|
12 | int main(int argc, char *argv[]) | |||
|
13 | { | |||
|
14 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; | |||
|
15 | ||||
|
16 | NSBundle *mainBundle = [NSBundle mainBundle]; | |||
|
17 | NSString *resourcePath = [mainBundle resourcePath]; | |||
|
18 | NSArray *pythonPathArray = [NSArray arrayWithObjects: resourcePath, [resourcePath stringByAppendingPathComponent:@"PyObjC"], nil]; | |||
|
19 | ||||
|
20 | setenv("PYTHONPATH", [[pythonPathArray componentsJoinedByString:@":"] UTF8String], 1); | |||
|
21 | ||||
|
22 | NSArray *possibleMainExtensions = [NSArray arrayWithObjects: @"py", @"pyc", @"pyo", nil]; | |||
|
23 | NSString *mainFilePath = nil; | |||
|
24 | ||||
|
25 | for (NSString *possibleMainExtension in possibleMainExtensions) { | |||
|
26 | mainFilePath = [mainBundle pathForResource: @"main" ofType: possibleMainExtension]; | |||
|
27 | if ( mainFilePath != nil ) break; | |||
|
28 | } | |||
|
29 | ||||
|
30 | if ( !mainFilePath ) { | |||
|
31 | [NSException raise: NSInternalInconsistencyException format: @"%s:%d main() Failed to find the Main.{py,pyc,pyo} file in the application wrapper's Resources directory.", __FILE__, __LINE__]; | |||
|
32 | } | |||
|
33 | ||||
|
34 | Py_SetProgramName("/usr/bin/python"); | |||
|
35 | Py_Initialize(); | |||
|
36 | PySys_SetArgv(argc, (char **)argv); | |||
|
37 | ||||
|
38 | const char *mainFilePathPtr = [mainFilePath UTF8String]; | |||
|
39 | FILE *mainFile = fopen(mainFilePathPtr, "r"); | |||
|
40 | int result = PyRun_SimpleFile(mainFile, (char *)[[mainFilePath lastPathComponent] UTF8String]); | |||
|
41 | ||||
|
42 | if ( result != 0 ) | |||
|
43 | [NSException raise: NSInternalInconsistencyException | |||
|
44 | format: @"%s:%d main() PyRun_SimpleFile failed with file '%@'. See console for errors.", __FILE__, __LINE__, mainFilePath]; | |||
|
45 | ||||
|
46 | [pool drain]; | |||
|
47 | ||||
|
48 | return result; | |||
|
49 | } |
@@ -0,0 +1,24 b'' | |||||
|
1 | # | |||
|
2 | # main.py | |||
|
3 | # IPython1Sandbox | |||
|
4 | # | |||
|
5 | # Created by Barry Wark on 3/4/08. | |||
|
6 | # Copyright __MyCompanyName__ 2008. All rights reserved. | |||
|
7 | # | |||
|
8 | ||||
|
9 | #import modules required by application | |||
|
10 | import objc | |||
|
11 | import Foundation | |||
|
12 | import AppKit | |||
|
13 | ||||
|
14 | from PyObjCTools import AppHelper | |||
|
15 | ||||
|
16 | from twisted.internet import _threadedselect | |||
|
17 | reactor = _threadedselect.install() | |||
|
18 | ||||
|
19 | # import modules containing classes required to start application and load MainMenu.nib | |||
|
20 | import IPython1SandboxAppDelegate | |||
|
21 | import IPython.frontend.cocoa.cocoa_frontend | |||
|
22 | ||||
|
23 | # pass control to AppKit | |||
|
24 | AppHelper.runEventLoop() |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 |
@@ -0,0 +1,27 b'' | |||||
|
1 | 2008-03-14 00:06:49-0700 [-] Log opened. | |||
|
2 | 2008-03-14 00:06:49-0700 [-] --> ipython1.frontend.cocoa.tests.test_cocoa_frontend.TestIPythonCocoaControler.testControllerCompletesToken <-- | |||
|
3 | 2008-03-14 00:06:49-0700 [-] Unhandled error in Deferred: | |||
|
4 | 2008-03-14 00:06:49-0700 [-] Unhandled Error | |||
|
5 | Traceback (most recent call last): | |||
|
6 | File "/Library/Python/2.5/site-packages/Twisted-2.5.0_rUnknown-py2.5-macosx-10.3-i386.egg/twisted/internet/utils.py", line 144, in runWithWarningsSuppressed | |||
|
7 | result = f(*a, **kw) | |||
|
8 | File "/Users/barry/Desktop/ipython1-cocoa/ipython1/frontend/cocoa/tests/test_cocoa_frontend.py", line 94, in testControllerCompletesToken | |||
|
9 | self.controller.executeRequest([code]).addCallback(testCompletes) | |||
|
10 | File "/Library/Python/2.5/site-packages/Twisted-2.5.0_rUnknown-py2.5-macosx-10.3-i386.egg/twisted/internet/defer.py", line 196, in addCallback | |||
|
11 | callbackKeywords=kw) | |||
|
12 | File "/Library/Python/2.5/site-packages/Twisted-2.5.0_rUnknown-py2.5-macosx-10.3-i386.egg/twisted/internet/defer.py", line 187, in addCallbacks | |||
|
13 | self._runCallbacks() | |||
|
14 | --- <exception caught here> --- | |||
|
15 | File "/Library/Python/2.5/site-packages/Twisted-2.5.0_rUnknown-py2.5-macosx-10.3-i386.egg/twisted/internet/defer.py", line 325, in _runCallbacks | |||
|
16 | self.result = callback(self.result, *args, **kw) | |||
|
17 | File "/Users/barry/Desktop/ipython1-cocoa/ipython1/frontend/cocoa/tests/test_cocoa_frontend.py", line 89, in testCompletes | |||
|
18 | self.assert_("longNameVariable" in result) | |||
|
19 | File "/Library/Python/2.5/site-packages/Twisted-2.5.0_rUnknown-py2.5-macosx-10.3-i386.egg/twisted/trial/unittest.py", line 136, in failUnless | |||
|
20 | raise self.failureException(msg) | |||
|
21 | twisted.trial.unittest.FailTest: None | |||
|
22 | ||||
|
23 | 2008-03-14 00:06:49-0700 [-] --> ipython1.frontend.cocoa.tests.test_cocoa_frontend.TestIPythonCocoaControler.testControllerExecutesCode <-- | |||
|
24 | 2008-03-14 00:06:49-0700 [-] --> ipython1.frontend.cocoa.tests.test_cocoa_frontend.TestIPythonCocoaControler.testControllerInstantiatesIEngineInteractive <-- | |||
|
25 | 2008-03-14 00:06:49-0700 [-] --> ipython1.frontend.cocoa.tests.test_cocoa_frontend.TestIPythonCocoaControler.testControllerMirrorsUserNSWithValuesAsStrings <-- | |||
|
26 | 2008-03-14 00:06:49-0700 [-] --> ipython1.frontend.cocoa.tests.test_cocoa_frontend.TestIPythonCocoaControler.testControllerRaisesCompilerErrorForIllegalCode <-- | |||
|
27 | 2008-03-14 00:06:49-0700 [-] --> ipython1.frontend.cocoa.tests.test_cocoa_frontend.TestIPythonCocoaControler.testControllerReturnsNoneForIncompleteCode <-- |
@@ -0,0 +1,72 b'' | |||||
|
1 | # encoding: utf-8 | |||
|
2 | """This file contains unittests for the | |||
|
3 | IPython.frontend.cocoa.cocoa_frontend module. | |||
|
4 | """ | |||
|
5 | __docformat__ = "restructuredtext en" | |||
|
6 | ||||
|
7 | #--------------------------------------------------------------------------- | |||
|
8 | # Copyright (C) 2005 The IPython Development Team | |||
|
9 | # | |||
|
10 | # Distributed under the terms of the BSD License. The full license is in | |||
|
11 | # the file COPYING, distributed as part of this software. | |||
|
12 | #--------------------------------------------------------------------------- | |||
|
13 | ||||
|
14 | #--------------------------------------------------------------------------- | |||
|
15 | # Imports | |||
|
16 | #--------------------------------------------------------------------------- | |||
|
17 | from IPython.kernel.core.interpreter import Interpreter | |||
|
18 | import IPython.kernel.engineservice as es | |||
|
19 | from IPython.testing.util import DeferredTestCase | |||
|
20 | from twisted.internet.defer import succeed | |||
|
21 | from IPython.frontend.cocoa.cocoa_frontend import IPythonCocoaController | |||
|
22 | ||||
|
23 | from Foundation import NSMakeRect | |||
|
24 | from AppKit import NSTextView, NSScrollView | |||
|
25 | ||||
|
26 | class TestIPythonCocoaControler(DeferredTestCase): | |||
|
27 | """Tests for IPythonCocoaController""" | |||
|
28 | ||||
|
29 | def setUp(self): | |||
|
30 | self.controller = IPythonCocoaController.alloc().init() | |||
|
31 | self.engine = es.EngineService() | |||
|
32 | self.engine.startService() | |||
|
33 | ||||
|
34 | ||||
|
35 | def tearDown(self): | |||
|
36 | self.controller = None | |||
|
37 | self.engine.stopService() | |||
|
38 | ||||
|
39 | def testControllerExecutesCode(self): | |||
|
40 | code ="""5+5""" | |||
|
41 | expected = Interpreter().execute(code) | |||
|
42 | del expected['number'] | |||
|
43 | def removeNumberAndID(result): | |||
|
44 | del result['number'] | |||
|
45 | del result['id'] | |||
|
46 | return result | |||
|
47 | self.assertDeferredEquals( | |||
|
48 | self.controller.execute(code).addCallback(removeNumberAndID), | |||
|
49 | expected) | |||
|
50 | ||||
|
51 | def testControllerMirrorsUserNSWithValuesAsStrings(self): | |||
|
52 | code = """userns1=1;userns2=2""" | |||
|
53 | def testControllerUserNS(result): | |||
|
54 | self.assertEquals(self.controller.userNS['userns1'], 1) | |||
|
55 | self.assertEquals(self.controller.userNS['userns2'], 2) | |||
|
56 | ||||
|
57 | self.controller.execute(code).addCallback(testControllerUserNS) | |||
|
58 | ||||
|
59 | ||||
|
60 | def testControllerInstantiatesIEngine(self): | |||
|
61 | self.assert_(es.IEngineBase.providedBy(self.controller.engine)) | |||
|
62 | ||||
|
63 | def testControllerCompletesToken(self): | |||
|
64 | code = """longNameVariable=10""" | |||
|
65 | def testCompletes(result): | |||
|
66 | self.assert_("longNameVariable" in result) | |||
|
67 | ||||
|
68 | def testCompleteToken(result): | |||
|
69 | self.controller.complete("longNa").addCallback(testCompletes) | |||
|
70 | ||||
|
71 | self.controller.execute(code).addCallback(testCompletes) | |||
|
72 |
@@ -0,0 +1,352 b'' | |||||
|
1 | # encoding: utf-8 | |||
|
2 | # -*- test-case-name: IPython.frontend.tests.test_frontendbase -*- | |||
|
3 | """ | |||
|
4 | frontendbase provides an interface and base class for GUI frontends for | |||
|
5 | IPython.kernel/IPython.kernel.core. | |||
|
6 | ||||
|
7 | Frontend implementations will likely want to subclass FrontEndBase. | |||
|
8 | ||||
|
9 | Author: Barry Wark | |||
|
10 | """ | |||
|
11 | __docformat__ = "restructuredtext en" | |||
|
12 | ||||
|
13 | #------------------------------------------------------------------------------- | |||
|
14 | # Copyright (C) 2008 The IPython Development Team | |||
|
15 | # | |||
|
16 | # Distributed under the terms of the BSD License. The full license is in | |||
|
17 | # the file COPYING, distributed as part of this software. | |||
|
18 | #------------------------------------------------------------------------------- | |||
|
19 | ||||
|
20 | #------------------------------------------------------------------------------- | |||
|
21 | # Imports | |||
|
22 | #------------------------------------------------------------------------------- | |||
|
23 | import string | |||
|
24 | import uuid | |||
|
25 | import _ast | |||
|
26 | ||||
|
27 | import zope.interface as zi | |||
|
28 | ||||
|
29 | from IPython.kernel.core.history import FrontEndHistory | |||
|
30 | from IPython.kernel.core.util import Bunch | |||
|
31 | from IPython.kernel.engineservice import IEngineCore | |||
|
32 | ||||
|
33 | from twisted.python.failure import Failure | |||
|
34 | ||||
|
35 | ############################################################################## | |||
|
36 | # TEMPORARY!!! fake configuration, while we decide whether to use tconfig or | |||
|
37 | # not | |||
|
38 | ||||
|
39 | rc = Bunch() | |||
|
40 | rc.prompt_in1 = r'In [$number]: ' | |||
|
41 | rc.prompt_in2 = r'...' | |||
|
42 | rc.prompt_out = r'Out [$number]: ' | |||
|
43 | ||||
|
44 | ############################################################################## | |||
|
45 | ||||
|
46 | class IFrontEndFactory(zi.Interface): | |||
|
47 | """Factory interface for frontends.""" | |||
|
48 | ||||
|
49 | def __call__(engine=None, history=None): | |||
|
50 | """ | |||
|
51 | Parameters: | |||
|
52 | interpreter : IPython.kernel.engineservice.IEngineCore | |||
|
53 | """ | |||
|
54 | ||||
|
55 | pass | |||
|
56 | ||||
|
57 | ||||
|
58 | ||||
|
59 | class IFrontEnd(zi.Interface): | |||
|
60 | """Interface for frontends. All methods return t.i.d.Deferred""" | |||
|
61 | ||||
|
62 | zi.Attribute("input_prompt_template", "string.Template instance\ | |||
|
63 | substituteable with execute result.") | |||
|
64 | zi.Attribute("output_prompt_template", "string.Template instance\ | |||
|
65 | substituteable with execute result.") | |||
|
66 | zi.Attribute("continuation_prompt_template", "string.Template instance\ | |||
|
67 | substituteable with execute result.") | |||
|
68 | ||||
|
69 | def update_cell_prompt(self, result): | |||
|
70 | """Subclass may override to update the input prompt for a block. | |||
|
71 | Since this method will be called as a | |||
|
72 | twisted.internet.defer.Deferred's callback, | |||
|
73 | implementations should return result when finished. | |||
|
74 | ||||
|
75 | NB: result is a failure if the execute returned a failre. | |||
|
76 | To get the blockID, you should do something like:: | |||
|
77 | if(isinstance(result, twisted.python.failure.Failure)): | |||
|
78 | blockID = result.blockID | |||
|
79 | else: | |||
|
80 | blockID = result['blockID'] | |||
|
81 | """ | |||
|
82 | ||||
|
83 | pass | |||
|
84 | ||||
|
85 | def render_result(self, result): | |||
|
86 | """Render the result of an execute call. Implementors may choose the | |||
|
87 | method of rendering. | |||
|
88 | For example, a notebook-style frontend might render a Chaco plot | |||
|
89 | inline. | |||
|
90 | ||||
|
91 | Parameters: | |||
|
92 | result : dict (result of IEngineBase.execute ) | |||
|
93 | ||||
|
94 | Result: | |||
|
95 | Output of frontend rendering | |||
|
96 | """ | |||
|
97 | ||||
|
98 | pass | |||
|
99 | ||||
|
100 | def render_error(self, failure): | |||
|
101 | """Subclasses must override to render the failure. Since this method | |||
|
102 | ill be called as a twisted.internet.defer.Deferred's callback, | |||
|
103 | implementations should return result when finished. | |||
|
104 | """ | |||
|
105 | ||||
|
106 | pass | |||
|
107 | ||||
|
108 | ||||
|
109 | def input_prompt(result={}): | |||
|
110 | """Returns the input prompt by subsituting into | |||
|
111 | self.input_prompt_template | |||
|
112 | """ | |||
|
113 | pass | |||
|
114 | ||||
|
115 | def output_prompt(result): | |||
|
116 | """Returns the output prompt by subsituting into | |||
|
117 | self.output_prompt_template | |||
|
118 | """ | |||
|
119 | ||||
|
120 | pass | |||
|
121 | ||||
|
122 | def continuation_prompt(): | |||
|
123 | """Returns the continuation prompt by subsituting into | |||
|
124 | self.continuation_prompt_template | |||
|
125 | """ | |||
|
126 | ||||
|
127 | pass | |||
|
128 | ||||
|
129 | def is_complete(block): | |||
|
130 | """Returns True if block is complete, False otherwise.""" | |||
|
131 | ||||
|
132 | pass | |||
|
133 | ||||
|
134 | def compile_ast(block): | |||
|
135 | """Compiles block to an _ast.AST""" | |||
|
136 | ||||
|
137 | pass | |||
|
138 | ||||
|
139 | ||||
|
140 | def get_history_previous(currentBlock): | |||
|
141 | """Returns the block previous in the history. Saves currentBlock if | |||
|
142 | the history_cursor is currently at the end of the input history""" | |||
|
143 | pass | |||
|
144 | ||||
|
145 | def get_history_next(): | |||
|
146 | """Returns the next block in the history.""" | |||
|
147 | ||||
|
148 | pass | |||
|
149 | ||||
|
150 | ||||
|
151 | class FrontEndBase(object): | |||
|
152 | """ | |||
|
153 | FrontEndBase manages the state tasks for a CLI frontend: | |||
|
154 | - Input and output history management | |||
|
155 | - Input/continuation and output prompt generation | |||
|
156 | ||||
|
157 | Some issues (due to possibly unavailable engine): | |||
|
158 | - How do we get the current cell number for the engine? | |||
|
159 | - How do we handle completions? | |||
|
160 | """ | |||
|
161 | ||||
|
162 | zi.implements(IFrontEnd) | |||
|
163 | zi.classProvides(IFrontEndFactory) | |||
|
164 | ||||
|
165 | history_cursor = 0 | |||
|
166 | ||||
|
167 | current_indent_level = 0 | |||
|
168 | ||||
|
169 | ||||
|
170 | input_prompt_template = string.Template(rc.prompt_in1) | |||
|
171 | output_prompt_template = string.Template(rc.prompt_out) | |||
|
172 | continuation_prompt_template = string.Template(rc.prompt_in2) | |||
|
173 | ||||
|
174 | def __init__(self, engine=None, history=None): | |||
|
175 | assert(engine==None or IEngineCore.providedBy(engine)) | |||
|
176 | self.engine = IEngineCore(engine) | |||
|
177 | if history is None: | |||
|
178 | self.history = FrontEndHistory(input_cache=['']) | |||
|
179 | else: | |||
|
180 | self.history = history | |||
|
181 | ||||
|
182 | ||||
|
183 | def input_prompt(self, result={}): | |||
|
184 | """Returns the current input prompt | |||
|
185 | ||||
|
186 | It would be great to use ipython1.core.prompts.Prompt1 here | |||
|
187 | """ | |||
|
188 | ||||
|
189 | result.setdefault('number','') | |||
|
190 | ||||
|
191 | return self.input_prompt_template.safe_substitute(result) | |||
|
192 | ||||
|
193 | ||||
|
194 | def continuation_prompt(self): | |||
|
195 | """Returns the current continuation prompt""" | |||
|
196 | ||||
|
197 | return self.continuation_prompt_template.safe_substitute() | |||
|
198 | ||||
|
199 | def output_prompt(self, result): | |||
|
200 | """Returns the output prompt for result""" | |||
|
201 | ||||
|
202 | return self.output_prompt_template.safe_substitute(result) | |||
|
203 | ||||
|
204 | ||||
|
205 | def is_complete(self, block): | |||
|
206 | """Determine if block is complete. | |||
|
207 | ||||
|
208 | Parameters | |||
|
209 | block : string | |||
|
210 | ||||
|
211 | Result | |||
|
212 | True if block can be sent to the engine without compile errors. | |||
|
213 | False otherwise. | |||
|
214 | """ | |||
|
215 | ||||
|
216 | try: | |||
|
217 | ast = self.compile_ast(block) | |||
|
218 | except: | |||
|
219 | return False | |||
|
220 | ||||
|
221 | lines = block.split('\n') | |||
|
222 | return (len(lines)==1 or str(lines[-1])=='') | |||
|
223 | ||||
|
224 | ||||
|
225 | def compile_ast(self, block): | |||
|
226 | """Compile block to an AST | |||
|
227 | ||||
|
228 | Parameters: | |||
|
229 | block : str | |||
|
230 | ||||
|
231 | Result: | |||
|
232 | AST | |||
|
233 | ||||
|
234 | Throws: | |||
|
235 | Exception if block cannot be compiled | |||
|
236 | """ | |||
|
237 | ||||
|
238 | return compile(block, "<string>", "exec", _ast.PyCF_ONLY_AST) | |||
|
239 | ||||
|
240 | ||||
|
241 | def execute(self, block, blockID=None): | |||
|
242 | """Execute the block and return result. | |||
|
243 | ||||
|
244 | Parameters: | |||
|
245 | block : {str, AST} | |||
|
246 | blockID : any | |||
|
247 | Caller may provide an ID to identify this block. | |||
|
248 | result['blockID'] := blockID | |||
|
249 | ||||
|
250 | Result: | |||
|
251 | Deferred result of self.interpreter.execute | |||
|
252 | """ | |||
|
253 | ||||
|
254 | if(not self.is_complete(block)): | |||
|
255 | return Failure(Exception("Block is not compilable")) | |||
|
256 | ||||
|
257 | if(blockID == None): | |||
|
258 | blockID = uuid.uuid4() #random UUID | |||
|
259 | ||||
|
260 | d = self.engine.execute(block) | |||
|
261 | d.addCallback(self._add_history, block=block) | |||
|
262 | d.addBoth(self._add_block_id, blockID) | |||
|
263 | d.addBoth(self.update_cell_prompt) | |||
|
264 | d.addCallbacks(self.render_result, errback=self.render_error) | |||
|
265 | ||||
|
266 | return d | |||
|
267 | ||||
|
268 | ||||
|
269 | def _add_block_id(self, result, blockID): | |||
|
270 | """Add the blockID to result or failure. Unfortunatley, we have to | |||
|
271 | treat failures differently than result dicts. | |||
|
272 | """ | |||
|
273 | ||||
|
274 | if(isinstance(result, Failure)): | |||
|
275 | result.blockID = blockID | |||
|
276 | else: | |||
|
277 | result['blockID'] = blockID | |||
|
278 | ||||
|
279 | return result | |||
|
280 | ||||
|
281 | def _add_history(self, result, block=None): | |||
|
282 | """Add block to the history""" | |||
|
283 | ||||
|
284 | assert(block != None) | |||
|
285 | self.history.add_items([block]) | |||
|
286 | self.history_cursor += 1 | |||
|
287 | ||||
|
288 | return result | |||
|
289 | ||||
|
290 | ||||
|
291 | def get_history_previous(self, currentBlock): | |||
|
292 | """ Returns previous history string and decrement history cursor. | |||
|
293 | """ | |||
|
294 | command = self.history.get_history_item(self.history_cursor - 1) | |||
|
295 | ||||
|
296 | if command is not None: | |||
|
297 | if(self.history_cursor == len(self.history.input_cache)): | |||
|
298 | self.history.input_cache[self.history_cursor] = currentBlock | |||
|
299 | self.history_cursor -= 1 | |||
|
300 | return command | |||
|
301 | ||||
|
302 | ||||
|
303 | def get_history_next(self): | |||
|
304 | """ Returns next history string and increment history cursor. | |||
|
305 | """ | |||
|
306 | command = self.history.get_history_item(self.history_cursor+1) | |||
|
307 | ||||
|
308 | if command is not None: | |||
|
309 | self.history_cursor += 1 | |||
|
310 | return command | |||
|
311 | ||||
|
312 | ### | |||
|
313 | # Subclasses probably want to override these methods... | |||
|
314 | ### | |||
|
315 | ||||
|
316 | def update_cell_prompt(self, result): | |||
|
317 | """Subclass may override to update the input prompt for a block. | |||
|
318 | Since this method will be called as a | |||
|
319 | twisted.internet.defer.Deferred's callback, implementations should | |||
|
320 | return result when finished. | |||
|
321 | ||||
|
322 | NB: result is a failure if the execute returned a failre. | |||
|
323 | To get the blockID, you should do something like:: | |||
|
324 | if(isinstance(result, twisted.python.failure.Failure)): | |||
|
325 | blockID = result.blockID | |||
|
326 | else: | |||
|
327 | blockID = result['blockID'] | |||
|
328 | ||||
|
329 | ||||
|
330 | """ | |||
|
331 | ||||
|
332 | return result | |||
|
333 | ||||
|
334 | ||||
|
335 | def render_result(self, result): | |||
|
336 | """Subclasses must override to render result. Since this method will | |||
|
337 | be called as a twisted.internet.defer.Deferred's callback, | |||
|
338 | implementations should return result when finished. | |||
|
339 | """ | |||
|
340 | ||||
|
341 | return result | |||
|
342 | ||||
|
343 | ||||
|
344 | def render_error(self, failure): | |||
|
345 | """Subclasses must override to render the failure. Since this method | |||
|
346 | will be called as a twisted.internet.defer.Deferred's callback, | |||
|
347 | implementations should return result when finished.""" | |||
|
348 | ||||
|
349 | return failure | |||
|
350 | ||||
|
351 | ||||
|
352 |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 |
@@ -0,0 +1,151 b'' | |||||
|
1 | # encoding: utf-8 | |||
|
2 | ||||
|
3 | """This file contains unittests for the frontendbase module.""" | |||
|
4 | ||||
|
5 | __docformat__ = "restructuredtext en" | |||
|
6 | ||||
|
7 | #--------------------------------------------------------------------------- | |||
|
8 | # Copyright (C) 2008 The IPython Development Team | |||
|
9 | # | |||
|
10 | # Distributed under the terms of the BSD License. The full license is in | |||
|
11 | # the file COPYING, distributed as part of this software. | |||
|
12 | #--------------------------------------------------------------------------- | |||
|
13 | ||||
|
14 | #--------------------------------------------------------------------------- | |||
|
15 | # Imports | |||
|
16 | #--------------------------------------------------------------------------- | |||
|
17 | ||||
|
18 | import unittest | |||
|
19 | from IPython.frontend import frontendbase | |||
|
20 | from IPython.kernel.engineservice import EngineService | |||
|
21 | ||||
|
22 | class FrontEndCallbackChecker(frontendbase.FrontEndBase): | |||
|
23 | """FrontEndBase subclass for checking callbacks""" | |||
|
24 | def __init__(self, engine=None, history=None): | |||
|
25 | super(FrontEndCallbackChecker, self).__init__(engine=engine, | |||
|
26 | history=history) | |||
|
27 | self.updateCalled = False | |||
|
28 | self.renderResultCalled = False | |||
|
29 | self.renderErrorCalled = False | |||
|
30 | ||||
|
31 | def update_cell_prompt(self, result): | |||
|
32 | self.updateCalled = True | |||
|
33 | return result | |||
|
34 | ||||
|
35 | def render_result(self, result): | |||
|
36 | self.renderResultCalled = True | |||
|
37 | return result | |||
|
38 | ||||
|
39 | ||||
|
40 | def render_error(self, failure): | |||
|
41 | self.renderErrorCalled = True | |||
|
42 | return failure | |||
|
43 | ||||
|
44 | ||||
|
45 | ||||
|
46 | ||||
|
47 | class TestFrontendBase(unittest.TestCase): | |||
|
48 | def setUp(self): | |||
|
49 | """Setup the EngineService and FrontEndBase""" | |||
|
50 | ||||
|
51 | self.fb = FrontEndCallbackChecker(engine=EngineService()) | |||
|
52 | ||||
|
53 | ||||
|
54 | def test_implements_IFrontEnd(self): | |||
|
55 | assert(frontendbase.IFrontEnd.implementedBy( | |||
|
56 | frontendbase.FrontEndBase)) | |||
|
57 | ||||
|
58 | ||||
|
59 | def test_is_complete_returns_False_for_incomplete_block(self): | |||
|
60 | """""" | |||
|
61 | ||||
|
62 | block = """def test(a):""" | |||
|
63 | ||||
|
64 | assert(self.fb.is_complete(block) == False) | |||
|
65 | ||||
|
66 | def test_is_complete_returns_True_for_complete_block(self): | |||
|
67 | """""" | |||
|
68 | ||||
|
69 | block = """def test(a): pass""" | |||
|
70 | ||||
|
71 | assert(self.fb.is_complete(block)) | |||
|
72 | ||||
|
73 | block = """a=3""" | |||
|
74 | ||||
|
75 | assert(self.fb.is_complete(block)) | |||
|
76 | ||||
|
77 | ||||
|
78 | def test_blockID_added_to_result(self): | |||
|
79 | block = """3+3""" | |||
|
80 | ||||
|
81 | d = self.fb.execute(block, blockID='TEST_ID') | |||
|
82 | ||||
|
83 | d.addCallback(self.checkBlockID, expected='TEST_ID') | |||
|
84 | ||||
|
85 | def test_blockID_added_to_failure(self): | |||
|
86 | block = "raise Exception()" | |||
|
87 | ||||
|
88 | d = self.fb.execute(block,blockID='TEST_ID') | |||
|
89 | d.addErrback(self.checkFailureID, expected='TEST_ID') | |||
|
90 | ||||
|
91 | def checkBlockID(self, result, expected=""): | |||
|
92 | assert(result['blockID'] == expected) | |||
|
93 | ||||
|
94 | ||||
|
95 | def checkFailureID(self, failure, expected=""): | |||
|
96 | assert(failure.blockID == expected) | |||
|
97 | ||||
|
98 | ||||
|
99 | def test_callbacks_added_to_execute(self): | |||
|
100 | """test that | |||
|
101 | update_cell_prompt | |||
|
102 | render_result | |||
|
103 | ||||
|
104 | are added to execute request | |||
|
105 | """ | |||
|
106 | ||||
|
107 | d = self.fb.execute("10+10") | |||
|
108 | d.addCallback(self.checkCallbacks) | |||
|
109 | ||||
|
110 | ||||
|
111 | def checkCallbacks(self, result): | |||
|
112 | assert(self.fb.updateCalled) | |||
|
113 | assert(self.fb.renderResultCalled) | |||
|
114 | ||||
|
115 | ||||
|
116 | def test_error_callback_added_to_execute(self): | |||
|
117 | """test that render_error called on execution error""" | |||
|
118 | ||||
|
119 | d = self.fb.execute("raise Exception()") | |||
|
120 | d.addCallback(self.checkRenderError) | |||
|
121 | ||||
|
122 | def checkRenderError(self, result): | |||
|
123 | assert(self.fb.renderErrorCalled) | |||
|
124 | ||||
|
125 | def test_history_returns_expected_block(self): | |||
|
126 | """Make sure history browsing doesn't fail""" | |||
|
127 | ||||
|
128 | blocks = ["a=1","a=2","a=3"] | |||
|
129 | for b in blocks: | |||
|
130 | d = self.fb.execute(b) | |||
|
131 | ||||
|
132 | # d is now the deferred for the last executed block | |||
|
133 | d.addCallback(self.historyTests, blocks) | |||
|
134 | ||||
|
135 | ||||
|
136 | def historyTests(self, result, blocks): | |||
|
137 | """historyTests""" | |||
|
138 | ||||
|
139 | assert(len(blocks) >= 3) | |||
|
140 | assert(self.fb.get_history_previous("") == blocks[-2]) | |||
|
141 | assert(self.fb.get_history_previous("") == blocks[-3]) | |||
|
142 | assert(self.fb.get_history_next() == blocks[-2]) | |||
|
143 | ||||
|
144 | ||||
|
145 | def test_history_returns_none_at_startup(self): | |||
|
146 | """test_history_returns_none_at_startup""" | |||
|
147 | ||||
|
148 | assert(self.fb.get_history_previous("")==None) | |||
|
149 | assert(self.fb.get_history_next()==None) | |||
|
150 | ||||
|
151 |
@@ -1,864 +1,876 b'' | |||||
1 | # encoding: utf-8 |
|
1 | # encoding: utf-8 | |
2 | # -*- test-case-name: IPython.kernel.tests.test_engineservice -*- |
|
2 | # -*- test-case-name: IPython.kernel.tests.test_engineservice -*- | |
3 |
|
3 | |||
4 | """A Twisted Service Representation of the IPython core. |
|
4 | """A Twisted Service Representation of the IPython core. | |
5 |
|
5 | |||
6 | The IPython Core exposed to the network is called the Engine. Its |
|
6 | The IPython Core exposed to the network is called the Engine. Its | |
7 | representation in Twisted in the EngineService. Interfaces and adapters |
|
7 | representation in Twisted in the EngineService. Interfaces and adapters | |
8 | are used to abstract out the details of the actual network protocol used. |
|
8 | are used to abstract out the details of the actual network protocol used. | |
9 | The EngineService is an Engine that knows nothing about the actual protocol |
|
9 | The EngineService is an Engine that knows nothing about the actual protocol | |
10 | used. |
|
10 | used. | |
11 |
|
11 | |||
12 | The EngineService is exposed with various network protocols in modules like: |
|
12 | The EngineService is exposed with various network protocols in modules like: | |
13 |
|
13 | |||
14 | enginepb.py |
|
14 | enginepb.py | |
15 | enginevanilla.py |
|
15 | enginevanilla.py | |
16 |
|
16 | |||
17 | As of 12/12/06 the classes in this module have been simplified greatly. It was |
|
17 | As of 12/12/06 the classes in this module have been simplified greatly. It was | |
18 | felt that we had over-engineered things. To improve the maintainability of the |
|
18 | felt that we had over-engineered things. To improve the maintainability of the | |
19 | code we have taken out the ICompleteEngine interface and the completeEngine |
|
19 | code we have taken out the ICompleteEngine interface and the completeEngine | |
20 | method that automatically added methods to engines. |
|
20 | method that automatically added methods to engines. | |
21 |
|
21 | |||
22 | """ |
|
22 | """ | |
23 |
|
23 | |||
24 | __docformat__ = "restructuredtext en" |
|
24 | __docformat__ = "restructuredtext en" | |
25 |
|
25 | |||
26 | #------------------------------------------------------------------------------- |
|
26 | #------------------------------------------------------------------------------- | |
27 | # Copyright (C) 2008 The IPython Development Team |
|
27 | # Copyright (C) 2008 The IPython Development Team | |
28 | # |
|
28 | # | |
29 | # Distributed under the terms of the BSD License. The full license is in |
|
29 | # Distributed under the terms of the BSD License. The full license is in | |
30 | # the file COPYING, distributed as part of this software. |
|
30 | # the file COPYING, distributed as part of this software. | |
31 | #------------------------------------------------------------------------------- |
|
31 | #------------------------------------------------------------------------------- | |
32 |
|
32 | |||
33 | #------------------------------------------------------------------------------- |
|
33 | #------------------------------------------------------------------------------- | |
34 | # Imports |
|
34 | # Imports | |
35 | #------------------------------------------------------------------------------- |
|
35 | #------------------------------------------------------------------------------- | |
36 |
|
36 | |||
37 | import os, sys, copy |
|
37 | import os, sys, copy | |
38 | import cPickle as pickle |
|
38 | import cPickle as pickle | |
39 | from new import instancemethod |
|
39 | from new import instancemethod | |
40 |
|
40 | |||
41 | from twisted.application import service |
|
41 | from twisted.application import service | |
42 | from twisted.internet import defer, reactor |
|
42 | from twisted.internet import defer, reactor | |
43 | from twisted.python import log, failure, components |
|
43 | from twisted.python import log, failure, components | |
44 | import zope.interface as zi |
|
44 | import zope.interface as zi | |
45 |
|
45 | |||
46 | from IPython.kernel.core.interpreter import Interpreter |
|
46 | from IPython.kernel.core.interpreter import Interpreter | |
47 | from IPython.kernel import newserialized, error, util |
|
47 | from IPython.kernel import newserialized, error, util | |
48 | from IPython.kernel.util import printer |
|
48 | from IPython.kernel.util import printer | |
49 | from IPython.kernel.twistedutil import gatherBoth, DeferredList |
|
49 | from IPython.kernel.twistedutil import gatherBoth, DeferredList | |
50 | from IPython.kernel import codeutil |
|
50 | from IPython.kernel import codeutil | |
51 |
|
51 | |||
52 |
|
52 | |||
53 | #------------------------------------------------------------------------------- |
|
53 | #------------------------------------------------------------------------------- | |
54 | # Interface specification for the Engine |
|
54 | # Interface specification for the Engine | |
55 | #------------------------------------------------------------------------------- |
|
55 | #------------------------------------------------------------------------------- | |
56 |
|
56 | |||
57 | class IEngineCore(zi.Interface): |
|
57 | class IEngineCore(zi.Interface): | |
58 | """The minimal required interface for the IPython Engine. |
|
58 | """The minimal required interface for the IPython Engine. | |
59 |
|
59 | |||
60 | This interface provides a formal specification of the IPython core. |
|
60 | This interface provides a formal specification of the IPython core. | |
61 | All these methods should return deferreds regardless of what side of a |
|
61 | All these methods should return deferreds regardless of what side of a | |
62 | network connection they are on. |
|
62 | network connection they are on. | |
63 |
|
63 | |||
64 | In general, this class simply wraps a shell class and wraps its return |
|
64 | In general, this class simply wraps a shell class and wraps its return | |
65 | values as Deferred objects. If the underlying shell class method raises |
|
65 | values as Deferred objects. If the underlying shell class method raises | |
66 | an exception, this class should convert it to a twisted.failure.Failure |
|
66 | an exception, this class should convert it to a twisted.failure.Failure | |
67 | that will be propagated along the Deferred's errback chain. |
|
67 | that will be propagated along the Deferred's errback chain. | |
68 |
|
68 | |||
69 | In addition, Failures are aggressive. By this, we mean that if a method |
|
69 | In addition, Failures are aggressive. By this, we mean that if a method | |
70 | is performing multiple actions (like pulling multiple object) if any |
|
70 | is performing multiple actions (like pulling multiple object) if any | |
71 | single one fails, the entire method will fail with that Failure. It is |
|
71 | single one fails, the entire method will fail with that Failure. It is | |
72 | all or nothing. |
|
72 | all or nothing. | |
73 | """ |
|
73 | """ | |
74 |
|
74 | |||
75 | id = zi.interface.Attribute("the id of the Engine object") |
|
75 | id = zi.interface.Attribute("the id of the Engine object") | |
76 | properties = zi.interface.Attribute("A dict of properties of the Engine") |
|
76 | properties = zi.interface.Attribute("A dict of properties of the Engine") | |
77 |
|
77 | |||
78 | def execute(lines): |
|
78 | def execute(lines): | |
79 | """Execute lines of Python code. |
|
79 | """Execute lines of Python code. | |
80 |
|
80 | |||
81 | Returns a dictionary with keys (id, number, stdin, stdout, stderr) |
|
81 | Returns a dictionary with keys (id, number, stdin, stdout, stderr) | |
82 | upon success. |
|
82 | upon success. | |
83 |
|
83 | |||
84 | Returns a failure object if the execution of lines raises an exception. |
|
84 | Returns a failure object if the execution of lines raises an exception. | |
85 | """ |
|
85 | """ | |
86 |
|
86 | |||
87 | def push(namespace): |
|
87 | def push(namespace): | |
88 | """Push dict namespace into the user's namespace. |
|
88 | """Push dict namespace into the user's namespace. | |
89 |
|
89 | |||
90 | Returns a deferred to None or a failure. |
|
90 | Returns a deferred to None or a failure. | |
91 | """ |
|
91 | """ | |
92 |
|
92 | |||
93 | def pull(keys): |
|
93 | def pull(keys): | |
94 | """Pulls values out of the user's namespace by keys. |
|
94 | """Pulls values out of the user's namespace by keys. | |
95 |
|
95 | |||
96 | Returns a deferred to a tuple objects or a single object. |
|
96 | Returns a deferred to a tuple objects or a single object. | |
97 |
|
97 | |||
98 | Raises NameError if any one of objects doess not exist. |
|
98 | Raises NameError if any one of objects doess not exist. | |
99 | """ |
|
99 | """ | |
100 |
|
100 | |||
101 | def push_function(namespace): |
|
101 | def push_function(namespace): | |
102 | """Push a dict of key, function pairs into the user's namespace. |
|
102 | """Push a dict of key, function pairs into the user's namespace. | |
103 |
|
103 | |||
104 | Returns a deferred to None or a failure.""" |
|
104 | Returns a deferred to None or a failure.""" | |
105 |
|
105 | |||
106 | def pull_function(keys): |
|
106 | def pull_function(keys): | |
107 | """Pulls functions out of the user's namespace by keys. |
|
107 | """Pulls functions out of the user's namespace by keys. | |
108 |
|
108 | |||
109 | Returns a deferred to a tuple of functions or a single function. |
|
109 | Returns a deferred to a tuple of functions or a single function. | |
110 |
|
110 | |||
111 | Raises NameError if any one of the functions does not exist. |
|
111 | Raises NameError if any one of the functions does not exist. | |
112 | """ |
|
112 | """ | |
113 |
|
113 | |||
114 | def get_result(i=None): |
|
114 | def get_result(i=None): | |
115 | """Get the stdin/stdout/stderr of command i. |
|
115 | """Get the stdin/stdout/stderr of command i. | |
116 |
|
116 | |||
117 | Returns a deferred to a dict with keys |
|
117 | Returns a deferred to a dict with keys | |
118 | (id, number, stdin, stdout, stderr). |
|
118 | (id, number, stdin, stdout, stderr). | |
119 |
|
119 | |||
120 | Raises IndexError if command i does not exist. |
|
120 | Raises IndexError if command i does not exist. | |
121 | Raises TypeError if i in not an int. |
|
121 | Raises TypeError if i in not an int. | |
122 | """ |
|
122 | """ | |
123 |
|
123 | |||
124 | def reset(): |
|
124 | def reset(): | |
125 | """Reset the shell. |
|
125 | """Reset the shell. | |
126 |
|
126 | |||
127 | This clears the users namespace. Won't cause modules to be |
|
127 | This clears the users namespace. Won't cause modules to be | |
128 | reloaded. Should also re-initialize certain variables like id. |
|
128 | reloaded. Should also re-initialize certain variables like id. | |
129 | """ |
|
129 | """ | |
130 |
|
130 | |||
131 | def kill(): |
|
131 | def kill(): | |
132 | """Kill the engine by stopping the reactor.""" |
|
132 | """Kill the engine by stopping the reactor.""" | |
133 |
|
133 | |||
134 | def keys(): |
|
134 | def keys(): | |
135 | """Return the top level variables in the users namspace. |
|
135 | """Return the top level variables in the users namspace. | |
136 |
|
136 | |||
137 | Returns a deferred to a dict.""" |
|
137 | Returns a deferred to a dict.""" | |
138 |
|
138 | |||
139 |
|
139 | |||
140 | class IEngineSerialized(zi.Interface): |
|
140 | class IEngineSerialized(zi.Interface): | |
141 | """Push/Pull methods that take Serialized objects. |
|
141 | """Push/Pull methods that take Serialized objects. | |
142 |
|
142 | |||
143 | All methods should return deferreds. |
|
143 | All methods should return deferreds. | |
144 | """ |
|
144 | """ | |
145 |
|
145 | |||
146 | def push_serialized(namespace): |
|
146 | def push_serialized(namespace): | |
147 | """Push a dict of keys and Serialized objects into the user's namespace.""" |
|
147 | """Push a dict of keys and Serialized objects into the user's namespace.""" | |
148 |
|
148 | |||
149 | def pull_serialized(keys): |
|
149 | def pull_serialized(keys): | |
150 | """Pull objects by key from the user's namespace as Serialized. |
|
150 | """Pull objects by key from the user's namespace as Serialized. | |
151 |
|
151 | |||
152 | Returns a list of or one Serialized. |
|
152 | Returns a list of or one Serialized. | |
153 |
|
153 | |||
154 | Raises NameError is any one of the objects does not exist. |
|
154 | Raises NameError is any one of the objects does not exist. | |
155 | """ |
|
155 | """ | |
156 |
|
156 | |||
157 |
|
157 | |||
158 | class IEngineProperties(zi.Interface): |
|
158 | class IEngineProperties(zi.Interface): | |
159 | """Methods for access to the properties object of an Engine""" |
|
159 | """Methods for access to the properties object of an Engine""" | |
160 |
|
160 | |||
161 | properties = zi.Attribute("A StrictDict object, containing the properties") |
|
161 | properties = zi.Attribute("A StrictDict object, containing the properties") | |
162 |
|
162 | |||
163 | def set_properties(properties): |
|
163 | def set_properties(properties): | |
164 | """set properties by key and value""" |
|
164 | """set properties by key and value""" | |
165 |
|
165 | |||
166 | def get_properties(keys=None): |
|
166 | def get_properties(keys=None): | |
167 | """get a list of properties by `keys`, if no keys specified, get all""" |
|
167 | """get a list of properties by `keys`, if no keys specified, get all""" | |
168 |
|
168 | |||
169 | def del_properties(keys): |
|
169 | def del_properties(keys): | |
170 | """delete properties by `keys`""" |
|
170 | """delete properties by `keys`""" | |
171 |
|
171 | |||
172 | def has_properties(keys): |
|
172 | def has_properties(keys): | |
173 | """get a list of bool values for whether `properties` has `keys`""" |
|
173 | """get a list of bool values for whether `properties` has `keys`""" | |
174 |
|
174 | |||
175 | def clear_properties(): |
|
175 | def clear_properties(): | |
176 | """clear the properties dict""" |
|
176 | """clear the properties dict""" | |
177 |
|
177 | |||
178 | class IEngineBase(IEngineCore, IEngineSerialized, IEngineProperties): |
|
178 | class IEngineBase(IEngineCore, IEngineSerialized, IEngineProperties): | |
179 | """The basic engine interface that EngineService will implement. |
|
179 | """The basic engine interface that EngineService will implement. | |
180 |
|
180 | |||
181 | This exists so it is easy to specify adapters that adapt to and from the |
|
181 | This exists so it is easy to specify adapters that adapt to and from the | |
182 | API that the basic EngineService implements. |
|
182 | API that the basic EngineService implements. | |
183 | """ |
|
183 | """ | |
184 | pass |
|
184 | pass | |
185 |
|
185 | |||
186 | class IEngineQueued(IEngineBase): |
|
186 | class IEngineQueued(IEngineBase): | |
187 | """Interface for adding a queue to an IEngineBase. |
|
187 | """Interface for adding a queue to an IEngineBase. | |
188 |
|
188 | |||
189 | This interface extends the IEngineBase interface to add methods for managing |
|
189 | This interface extends the IEngineBase interface to add methods for managing | |
190 | the engine's queue. The implicit details of this interface are that the |
|
190 | the engine's queue. The implicit details of this interface are that the | |
191 | execution of all methods declared in IEngineBase should appropriately be |
|
191 | execution of all methods declared in IEngineBase should appropriately be | |
192 | put through a queue before execution. |
|
192 | put through a queue before execution. | |
193 |
|
193 | |||
194 | All methods should return deferreds. |
|
194 | All methods should return deferreds. | |
195 | """ |
|
195 | """ | |
196 |
|
196 | |||
197 | def clear_queue(): |
|
197 | def clear_queue(): | |
198 | """Clear the queue.""" |
|
198 | """Clear the queue.""" | |
199 |
|
199 | |||
200 | def queue_status(): |
|
200 | def queue_status(): | |
201 | """Get the queued and pending commands in the queue.""" |
|
201 | """Get the queued and pending commands in the queue.""" | |
202 |
|
202 | |||
203 | def register_failure_observer(obs): |
|
203 | def register_failure_observer(obs): | |
204 | """Register an observer of pending Failures. |
|
204 | """Register an observer of pending Failures. | |
205 |
|
205 | |||
206 | The observer must implement IFailureObserver. |
|
206 | The observer must implement IFailureObserver. | |
207 | """ |
|
207 | """ | |
208 |
|
208 | |||
209 | def unregister_failure_observer(obs): |
|
209 | def unregister_failure_observer(obs): | |
210 | """Unregister an observer of pending Failures.""" |
|
210 | """Unregister an observer of pending Failures.""" | |
211 |
|
211 | |||
212 |
|
212 | |||
213 | class IEngineThreaded(zi.Interface): |
|
213 | class IEngineThreaded(zi.Interface): | |
214 | """A place holder for threaded commands. |
|
214 | """A place holder for threaded commands. | |
215 |
|
215 | |||
216 | All methods should return deferreds. |
|
216 | All methods should return deferreds. | |
217 | """ |
|
217 | """ | |
218 | pass |
|
218 | pass | |
219 |
|
219 | |||
220 |
|
220 | |||
221 | #------------------------------------------------------------------------------- |
|
221 | #------------------------------------------------------------------------------- | |
222 | # Functions and classes to implement the EngineService |
|
222 | # Functions and classes to implement the EngineService | |
223 | #------------------------------------------------------------------------------- |
|
223 | #------------------------------------------------------------------------------- | |
224 |
|
224 | |||
225 |
|
225 | |||
226 | class StrictDict(dict): |
|
226 | class StrictDict(dict): | |
227 | """This is a strict copying dictionary for use as the interface to the |
|
227 | """This is a strict copying dictionary for use as the interface to the | |
228 | properties of an Engine. |
|
228 | properties of an Engine. | |
229 | :IMPORTANT: |
|
229 | :IMPORTANT: | |
230 | This object copies the values you set to it, and returns copies to you |
|
230 | This object copies the values you set to it, and returns copies to you | |
231 | when you request them. The only way to change properties os explicitly |
|
231 | when you request them. The only way to change properties os explicitly | |
232 | through the setitem and getitem of the dictionary interface. |
|
232 | through the setitem and getitem of the dictionary interface. | |
233 | Example: |
|
233 | Example: | |
234 | >>> e = kernel.get_engine(id) |
|
234 | >>> e = kernel.get_engine(id) | |
235 | >>> L = someList |
|
235 | >>> L = someList | |
236 | >>> e.properties['L'] = L |
|
236 | >>> e.properties['L'] = L | |
237 | >>> L == e.properties['L'] |
|
237 | >>> L == e.properties['L'] | |
238 | ... True |
|
238 | ... True | |
239 | >>> L.append(something Else) |
|
239 | >>> L.append(something Else) | |
240 | >>> L == e.properties['L'] |
|
240 | >>> L == e.properties['L'] | |
241 | ... False |
|
241 | ... False | |
242 |
|
242 | |||
243 | getitem copies, so calls to methods of objects do not affect the |
|
243 | getitem copies, so calls to methods of objects do not affect the | |
244 | properties, as in the following example: |
|
244 | properties, as in the following example: | |
245 | >>> e.properties[1] = range(2) |
|
245 | >>> e.properties[1] = range(2) | |
246 | >>> print e.properties[1] |
|
246 | >>> print e.properties[1] | |
247 | ... [0, 1] |
|
247 | ... [0, 1] | |
248 | >>> e.properties[1].append(2) |
|
248 | >>> e.properties[1].append(2) | |
249 | >>> print e.properties[1] |
|
249 | >>> print e.properties[1] | |
250 | ... [0, 1] |
|
250 | ... [0, 1] | |
251 |
|
251 | |||
252 | """ |
|
252 | """ | |
253 | def __init__(self, *args, **kwargs): |
|
253 | def __init__(self, *args, **kwargs): | |
254 | dict.__init__(self, *args, **kwargs) |
|
254 | dict.__init__(self, *args, **kwargs) | |
255 | self.modified = True |
|
255 | self.modified = True | |
256 |
|
256 | |||
257 | def __getitem__(self, key): |
|
257 | def __getitem__(self, key): | |
258 | return copy.deepcopy(dict.__getitem__(self, key)) |
|
258 | return copy.deepcopy(dict.__getitem__(self, key)) | |
259 |
|
259 | |||
260 | def __setitem__(self, key, value): |
|
260 | def __setitem__(self, key, value): | |
261 | # check if this entry is valid for transport around the network |
|
261 | # check if this entry is valid for transport around the network | |
262 | # and copying |
|
262 | # and copying | |
263 | try: |
|
263 | try: | |
264 | pickle.dumps(key, 2) |
|
264 | pickle.dumps(key, 2) | |
265 | pickle.dumps(value, 2) |
|
265 | pickle.dumps(value, 2) | |
266 | newvalue = copy.deepcopy(value) |
|
266 | newvalue = copy.deepcopy(value) | |
267 | except: |
|
267 | except: | |
268 | raise error.InvalidProperty(value) |
|
268 | raise error.InvalidProperty(value) | |
269 | dict.__setitem__(self, key, newvalue) |
|
269 | dict.__setitem__(self, key, newvalue) | |
270 | self.modified = True |
|
270 | self.modified = True | |
271 |
|
271 | |||
272 | def __delitem__(self, key): |
|
272 | def __delitem__(self, key): | |
273 | dict.__delitem__(self, key) |
|
273 | dict.__delitem__(self, key) | |
274 | self.modified = True |
|
274 | self.modified = True | |
275 |
|
275 | |||
276 | def update(self, dikt): |
|
276 | def update(self, dikt): | |
277 | for k,v in dikt.iteritems(): |
|
277 | for k,v in dikt.iteritems(): | |
278 | self[k] = v |
|
278 | self[k] = v | |
279 |
|
279 | |||
280 | def pop(self, key): |
|
280 | def pop(self, key): | |
281 | self.modified = True |
|
281 | self.modified = True | |
282 | return dict.pop(self, key) |
|
282 | return dict.pop(self, key) | |
283 |
|
283 | |||
284 | def popitem(self): |
|
284 | def popitem(self): | |
285 | self.modified = True |
|
285 | self.modified = True | |
286 | return dict.popitem(self) |
|
286 | return dict.popitem(self) | |
287 |
|
287 | |||
288 | def clear(self): |
|
288 | def clear(self): | |
289 | self.modified = True |
|
289 | self.modified = True | |
290 | dict.clear(self) |
|
290 | dict.clear(self) | |
291 |
|
291 | |||
292 | def subDict(self, *keys): |
|
292 | def subDict(self, *keys): | |
293 | d = {} |
|
293 | d = {} | |
294 | for key in keys: |
|
294 | for key in keys: | |
295 | d[key] = self[key] |
|
295 | d[key] = self[key] | |
296 | return d |
|
296 | return d | |
297 |
|
297 | |||
298 |
|
298 | |||
299 |
|
299 | |||
300 | class EngineAPI(object): |
|
300 | class EngineAPI(object): | |
301 | """This is the object through which the user can edit the `properties` |
|
301 | """This is the object through which the user can edit the `properties` | |
302 | attribute of an Engine. |
|
302 | attribute of an Engine. | |
303 | The Engine Properties object copies all object in and out of itself. |
|
303 | The Engine Properties object copies all object in and out of itself. | |
304 | See the EngineProperties object for details. |
|
304 | See the EngineProperties object for details. | |
305 | """ |
|
305 | """ | |
306 | _fix=False |
|
306 | _fix=False | |
307 | def __init__(self, id): |
|
307 | def __init__(self, id): | |
308 | self.id = id |
|
308 | self.id = id | |
309 | self.properties = StrictDict() |
|
309 | self.properties = StrictDict() | |
310 | self._fix=True |
|
310 | self._fix=True | |
311 |
|
311 | |||
312 | def __setattr__(self, k,v): |
|
312 | def __setattr__(self, k,v): | |
313 | if self._fix: |
|
313 | if self._fix: | |
314 | raise error.KernelError("I am protected!") |
|
314 | raise error.KernelError("I am protected!") | |
315 | else: |
|
315 | else: | |
316 | object.__setattr__(self, k, v) |
|
316 | object.__setattr__(self, k, v) | |
317 |
|
317 | |||
318 | def __delattr__(self, key): |
|
318 | def __delattr__(self, key): | |
319 | raise error.KernelError("I am protected!") |
|
319 | raise error.KernelError("I am protected!") | |
320 |
|
320 | |||
321 |
|
321 | |||
322 | _apiDict = {} |
|
322 | _apiDict = {} | |
323 |
|
323 | |||
324 | def get_engine(id): |
|
324 | def get_engine(id): | |
325 | """Get the Engine API object, whcih currently just provides the properties |
|
325 | """Get the Engine API object, whcih currently just provides the properties | |
326 | object, by ID""" |
|
326 | object, by ID""" | |
327 | global _apiDict |
|
327 | global _apiDict | |
328 | if not _apiDict.get(id): |
|
328 | if not _apiDict.get(id): | |
329 | _apiDict[id] = EngineAPI(id) |
|
329 | _apiDict[id] = EngineAPI(id) | |
330 | return _apiDict[id] |
|
330 | return _apiDict[id] | |
331 |
|
331 | |||
332 | def drop_engine(id): |
|
332 | def drop_engine(id): | |
333 | """remove an engine""" |
|
333 | """remove an engine""" | |
334 | global _apiDict |
|
334 | global _apiDict | |
335 | if _apiDict.has_key(id): |
|
335 | if _apiDict.has_key(id): | |
336 | del _apiDict[id] |
|
336 | del _apiDict[id] | |
337 |
|
337 | |||
338 | class EngineService(object, service.Service): |
|
338 | class EngineService(object, service.Service): | |
339 | """Adapt a IPython shell into a IEngine implementing Twisted Service.""" |
|
339 | """Adapt a IPython shell into a IEngine implementing Twisted Service.""" | |
340 |
|
340 | |||
341 | zi.implements(IEngineBase) |
|
341 | zi.implements(IEngineBase) | |
342 | name = 'EngineService' |
|
342 | name = 'EngineService' | |
343 |
|
343 | |||
344 | def __init__(self, shellClass=Interpreter, mpi=None): |
|
344 | def __init__(self, shellClass=Interpreter, mpi=None): | |
345 | """Create an EngineService. |
|
345 | """Create an EngineService. | |
346 |
|
346 | |||
347 | shellClass: something that implements IInterpreter or core1 |
|
347 | shellClass: something that implements IInterpreter or core1 | |
348 | mpi: an mpi module that has rank and size attributes |
|
348 | mpi: an mpi module that has rank and size attributes | |
349 | """ |
|
349 | """ | |
350 | self.shellClass = shellClass |
|
350 | self.shellClass = shellClass | |
351 | self.shell = self.shellClass() |
|
351 | self.shell = self.shellClass() | |
352 | self.mpi = mpi |
|
352 | self.mpi = mpi | |
353 | self.id = None |
|
353 | self.id = None | |
354 | self.properties = get_engine(self.id).properties |
|
354 | self.properties = get_engine(self.id).properties | |
355 | if self.mpi is not None: |
|
355 | if self.mpi is not None: | |
356 | log.msg("MPI started with rank = %i and size = %i" % |
|
356 | log.msg("MPI started with rank = %i and size = %i" % | |
357 | (self.mpi.rank, self.mpi.size)) |
|
357 | (self.mpi.rank, self.mpi.size)) | |
358 | self.id = self.mpi.rank |
|
358 | self.id = self.mpi.rank | |
359 | self._seedNamespace() |
|
359 | self._seedNamespace() | |
360 |
|
360 | |||
361 | # Make id a property so that the shell can get the updated id |
|
361 | # Make id a property so that the shell can get the updated id | |
362 |
|
362 | |||
363 | def _setID(self, id): |
|
363 | def _setID(self, id): | |
364 | self._id = id |
|
364 | self._id = id | |
365 | self.properties = get_engine(id).properties |
|
365 | self.properties = get_engine(id).properties | |
366 | self.shell.push({'id': id}) |
|
366 | self.shell.push({'id': id}) | |
367 |
|
367 | |||
368 | def _getID(self): |
|
368 | def _getID(self): | |
369 | return self._id |
|
369 | return self._id | |
370 |
|
370 | |||
371 | id = property(_getID, _setID) |
|
371 | id = property(_getID, _setID) | |
372 |
|
372 | |||
373 | def _seedNamespace(self): |
|
373 | def _seedNamespace(self): | |
374 | self.shell.push({'mpi': self.mpi, 'id' : self.id}) |
|
374 | self.shell.push({'mpi': self.mpi, 'id' : self.id}) | |
375 |
|
375 | |||
376 | def executeAndRaise(self, msg, callable, *args, **kwargs): |
|
376 | def executeAndRaise(self, msg, callable, *args, **kwargs): | |
377 | """Call a method of self.shell and wrap any exception.""" |
|
377 | """Call a method of self.shell and wrap any exception.""" | |
378 | d = defer.Deferred() |
|
378 | d = defer.Deferred() | |
379 | try: |
|
379 | try: | |
380 | result = callable(*args, **kwargs) |
|
380 | result = callable(*args, **kwargs) | |
381 | except: |
|
381 | except: | |
382 | # This gives the following: |
|
382 | # This gives the following: | |
383 | # et=exception class |
|
383 | # et=exception class | |
384 | # ev=exception class instance |
|
384 | # ev=exception class instance | |
385 | # tb=traceback object |
|
385 | # tb=traceback object | |
386 | et,ev,tb = sys.exc_info() |
|
386 | et,ev,tb = sys.exc_info() | |
387 | # This call adds attributes to the exception value |
|
387 | # This call adds attributes to the exception value | |
388 | et,ev,tb = self.shell.formatTraceback(et,ev,tb,msg) |
|
388 | et,ev,tb = self.shell.formatTraceback(et,ev,tb,msg) | |
389 | # Add another attribute |
|
389 | # Add another attribute | |
390 | ev._ipython_engine_info = msg |
|
390 | ev._ipython_engine_info = msg | |
391 | f = failure.Failure(ev,et,None) |
|
391 | f = failure.Failure(ev,et,None) | |
392 | d.errback(f) |
|
392 | d.errback(f) | |
393 | else: |
|
393 | else: | |
394 | d.callback(result) |
|
394 | d.callback(result) | |
395 |
|
395 | |||
396 | return d |
|
396 | return d | |
397 |
|
397 | |||
398 | # The IEngine methods. See the interface for documentation. |
|
398 | # The IEngine methods. See the interface for documentation. | |
399 |
|
399 | |||
400 | def execute(self, lines): |
|
400 | def execute(self, lines): | |
401 | msg = {'engineid':self.id, |
|
401 | msg = {'engineid':self.id, | |
402 | 'method':'execute', |
|
402 | 'method':'execute', | |
403 | 'args':[lines]} |
|
403 | 'args':[lines]} | |
404 | d = self.executeAndRaise(msg, self.shell.execute, lines) |
|
404 | d = self.executeAndRaise(msg, self.shell.execute, lines) | |
405 | d.addCallback(self.addIDToResult) |
|
405 | d.addCallback(self.addIDToResult) | |
406 | return d |
|
406 | return d | |
407 |
|
407 | |||
408 | def addIDToResult(self, result): |
|
408 | def addIDToResult(self, result): | |
409 | result['id'] = self.id |
|
409 | result['id'] = self.id | |
410 | return result |
|
410 | return result | |
411 |
|
411 | |||
412 | def push(self, namespace): |
|
412 | def push(self, namespace): | |
413 | msg = {'engineid':self.id, |
|
413 | msg = {'engineid':self.id, | |
414 | 'method':'push', |
|
414 | 'method':'push', | |
415 | 'args':[repr(namespace.keys())]} |
|
415 | 'args':[repr(namespace.keys())]} | |
416 | d = self.executeAndRaise(msg, self.shell.push, namespace) |
|
416 | d = self.executeAndRaise(msg, self.shell.push, namespace) | |
417 | return d |
|
417 | return d | |
418 |
|
418 | |||
419 | def pull(self, keys): |
|
419 | def pull(self, keys): | |
420 | msg = {'engineid':self.id, |
|
420 | msg = {'engineid':self.id, | |
421 | 'method':'pull', |
|
421 | 'method':'pull', | |
422 | 'args':[repr(keys)]} |
|
422 | 'args':[repr(keys)]} | |
423 | d = self.executeAndRaise(msg, self.shell.pull, keys) |
|
423 | d = self.executeAndRaise(msg, self.shell.pull, keys) | |
424 | return d |
|
424 | return d | |
425 |
|
425 | |||
426 | def push_function(self, namespace): |
|
426 | def push_function(self, namespace): | |
427 | msg = {'engineid':self.id, |
|
427 | msg = {'engineid':self.id, | |
428 | 'method':'push_function', |
|
428 | 'method':'push_function', | |
429 | 'args':[repr(namespace.keys())]} |
|
429 | 'args':[repr(namespace.keys())]} | |
430 | d = self.executeAndRaise(msg, self.shell.push_function, namespace) |
|
430 | d = self.executeAndRaise(msg, self.shell.push_function, namespace) | |
431 | return d |
|
431 | return d | |
432 |
|
432 | |||
433 | def pull_function(self, keys): |
|
433 | def pull_function(self, keys): | |
434 | msg = {'engineid':self.id, |
|
434 | msg = {'engineid':self.id, | |
435 | 'method':'pull_function', |
|
435 | 'method':'pull_function', | |
436 | 'args':[repr(keys)]} |
|
436 | 'args':[repr(keys)]} | |
437 | d = self.executeAndRaise(msg, self.shell.pull_function, keys) |
|
437 | d = self.executeAndRaise(msg, self.shell.pull_function, keys) | |
438 | return d |
|
438 | return d | |
439 |
|
439 | |||
440 | def get_result(self, i=None): |
|
440 | def get_result(self, i=None): | |
441 | msg = {'engineid':self.id, |
|
441 | msg = {'engineid':self.id, | |
442 | 'method':'get_result', |
|
442 | 'method':'get_result', | |
443 | 'args':[repr(i)]} |
|
443 | 'args':[repr(i)]} | |
444 | d = self.executeAndRaise(msg, self.shell.getCommand, i) |
|
444 | d = self.executeAndRaise(msg, self.shell.getCommand, i) | |
445 | d.addCallback(self.addIDToResult) |
|
445 | d.addCallback(self.addIDToResult) | |
446 | return d |
|
446 | return d | |
447 |
|
447 | |||
448 | def reset(self): |
|
448 | def reset(self): | |
449 | msg = {'engineid':self.id, |
|
449 | msg = {'engineid':self.id, | |
450 | 'method':'reset', |
|
450 | 'method':'reset', | |
451 | 'args':[]} |
|
451 | 'args':[]} | |
452 | del self.shell |
|
452 | del self.shell | |
453 | self.shell = self.shellClass() |
|
453 | self.shell = self.shellClass() | |
454 | self.properties.clear() |
|
454 | self.properties.clear() | |
455 | d = self.executeAndRaise(msg, self._seedNamespace) |
|
455 | d = self.executeAndRaise(msg, self._seedNamespace) | |
456 | return d |
|
456 | return d | |
457 |
|
457 | |||
458 | def kill(self): |
|
458 | def kill(self): | |
459 | drop_engine(self.id) |
|
459 | drop_engine(self.id) | |
460 | try: |
|
460 | try: | |
461 | reactor.stop() |
|
461 | reactor.stop() | |
462 | except RuntimeError: |
|
462 | except RuntimeError: | |
463 | log.msg('The reactor was not running apparently.') |
|
463 | log.msg('The reactor was not running apparently.') | |
464 | return defer.fail() |
|
464 | return defer.fail() | |
465 | else: |
|
465 | else: | |
466 | return defer.succeed(None) |
|
466 | return defer.succeed(None) | |
467 |
|
467 | |||
468 | def keys(self): |
|
468 | def keys(self): | |
469 | """Return a list of variables names in the users top level namespace. |
|
469 | """Return a list of variables names in the users top level namespace. | |
470 |
|
470 | |||
471 | This used to return a dict of all the keys/repr(values) in the |
|
471 | This used to return a dict of all the keys/repr(values) in the | |
472 | user's namespace. This was too much info for the ControllerService |
|
472 | user's namespace. This was too much info for the ControllerService | |
473 | to handle so it is now just a list of keys. |
|
473 | to handle so it is now just a list of keys. | |
474 | """ |
|
474 | """ | |
475 |
|
475 | |||
476 | remotes = [] |
|
476 | remotes = [] | |
477 | for k in self.shell.user_ns.iterkeys(): |
|
477 | for k in self.shell.user_ns.iterkeys(): | |
478 | if k not in ['__name__', '_ih', '_oh', '__builtins__', |
|
478 | if k not in ['__name__', '_ih', '_oh', '__builtins__', | |
479 | 'In', 'Out', '_', '__', '___', '__IP', 'input', 'raw_input']: |
|
479 | 'In', 'Out', '_', '__', '___', '__IP', 'input', 'raw_input']: | |
480 | remotes.append(k) |
|
480 | remotes.append(k) | |
481 | return defer.succeed(remotes) |
|
481 | return defer.succeed(remotes) | |
482 |
|
482 | |||
483 | def set_properties(self, properties): |
|
483 | def set_properties(self, properties): | |
484 | msg = {'engineid':self.id, |
|
484 | msg = {'engineid':self.id, | |
485 | 'method':'set_properties', |
|
485 | 'method':'set_properties', | |
486 | 'args':[repr(properties.keys())]} |
|
486 | 'args':[repr(properties.keys())]} | |
487 | return self.executeAndRaise(msg, self.properties.update, properties) |
|
487 | return self.executeAndRaise(msg, self.properties.update, properties) | |
488 |
|
488 | |||
489 | def get_properties(self, keys=None): |
|
489 | def get_properties(self, keys=None): | |
490 | msg = {'engineid':self.id, |
|
490 | msg = {'engineid':self.id, | |
491 | 'method':'get_properties', |
|
491 | 'method':'get_properties', | |
492 | 'args':[repr(keys)]} |
|
492 | 'args':[repr(keys)]} | |
493 | if keys is None: |
|
493 | if keys is None: | |
494 | keys = self.properties.keys() |
|
494 | keys = self.properties.keys() | |
495 | return self.executeAndRaise(msg, self.properties.subDict, *keys) |
|
495 | return self.executeAndRaise(msg, self.properties.subDict, *keys) | |
496 |
|
496 | |||
497 | def _doDel(self, keys): |
|
497 | def _doDel(self, keys): | |
498 | for key in keys: |
|
498 | for key in keys: | |
499 | del self.properties[key] |
|
499 | del self.properties[key] | |
500 |
|
500 | |||
501 | def del_properties(self, keys): |
|
501 | def del_properties(self, keys): | |
502 | msg = {'engineid':self.id, |
|
502 | msg = {'engineid':self.id, | |
503 | 'method':'del_properties', |
|
503 | 'method':'del_properties', | |
504 | 'args':[repr(keys)]} |
|
504 | 'args':[repr(keys)]} | |
505 | return self.executeAndRaise(msg, self._doDel, keys) |
|
505 | return self.executeAndRaise(msg, self._doDel, keys) | |
506 |
|
506 | |||
507 | def _doHas(self, keys): |
|
507 | def _doHas(self, keys): | |
508 | return [self.properties.has_key(key) for key in keys] |
|
508 | return [self.properties.has_key(key) for key in keys] | |
509 |
|
509 | |||
510 | def has_properties(self, keys): |
|
510 | def has_properties(self, keys): | |
511 | msg = {'engineid':self.id, |
|
511 | msg = {'engineid':self.id, | |
512 | 'method':'has_properties', |
|
512 | 'method':'has_properties', | |
513 | 'args':[repr(keys)]} |
|
513 | 'args':[repr(keys)]} | |
514 | return self.executeAndRaise(msg, self._doHas, keys) |
|
514 | return self.executeAndRaise(msg, self._doHas, keys) | |
515 |
|
515 | |||
516 | def clear_properties(self): |
|
516 | def clear_properties(self): | |
517 | msg = {'engineid':self.id, |
|
517 | msg = {'engineid':self.id, | |
518 | 'method':'clear_properties', |
|
518 | 'method':'clear_properties', | |
519 | 'args':[]} |
|
519 | 'args':[]} | |
520 | return self.executeAndRaise(msg, self.properties.clear) |
|
520 | return self.executeAndRaise(msg, self.properties.clear) | |
521 |
|
521 | |||
522 | def push_serialized(self, sNamespace): |
|
522 | def push_serialized(self, sNamespace): | |
523 | msg = {'engineid':self.id, |
|
523 | msg = {'engineid':self.id, | |
524 | 'method':'push_serialized', |
|
524 | 'method':'push_serialized', | |
525 | 'args':[repr(sNamespace.keys())]} |
|
525 | 'args':[repr(sNamespace.keys())]} | |
526 | ns = {} |
|
526 | ns = {} | |
527 | for k,v in sNamespace.iteritems(): |
|
527 | for k,v in sNamespace.iteritems(): | |
528 | try: |
|
528 | try: | |
529 | unserialized = newserialized.IUnSerialized(v) |
|
529 | unserialized = newserialized.IUnSerialized(v) | |
530 | ns[k] = unserialized.getObject() |
|
530 | ns[k] = unserialized.getObject() | |
531 | except: |
|
531 | except: | |
532 | return defer.fail() |
|
532 | return defer.fail() | |
533 | return self.executeAndRaise(msg, self.shell.push, ns) |
|
533 | return self.executeAndRaise(msg, self.shell.push, ns) | |
534 |
|
534 | |||
535 | def pull_serialized(self, keys): |
|
535 | def pull_serialized(self, keys): | |
536 | msg = {'engineid':self.id, |
|
536 | msg = {'engineid':self.id, | |
537 | 'method':'pull_serialized', |
|
537 | 'method':'pull_serialized', | |
538 | 'args':[repr(keys)]} |
|
538 | 'args':[repr(keys)]} | |
539 | if isinstance(keys, str): |
|
539 | if isinstance(keys, str): | |
540 | keys = [keys] |
|
540 | keys = [keys] | |
541 | if len(keys)==1: |
|
541 | if len(keys)==1: | |
542 | d = self.executeAndRaise(msg, self.shell.pull, keys) |
|
542 | d = self.executeAndRaise(msg, self.shell.pull, keys) | |
543 | d.addCallback(newserialized.serialize) |
|
543 | d.addCallback(newserialized.serialize) | |
544 | return d |
|
544 | return d | |
545 | elif len(keys)>1: |
|
545 | elif len(keys)>1: | |
546 | d = self.executeAndRaise(msg, self.shell.pull, keys) |
|
546 | d = self.executeAndRaise(msg, self.shell.pull, keys) | |
547 | @d.addCallback |
|
547 | @d.addCallback | |
548 | def packThemUp(values): |
|
548 | def packThemUp(values): | |
549 | serials = [] |
|
549 | serials = [] | |
550 | for v in values: |
|
550 | for v in values: | |
551 | try: |
|
551 | try: | |
552 | serials.append(newserialized.serialize(v)) |
|
552 | serials.append(newserialized.serialize(v)) | |
553 | except: |
|
553 | except: | |
554 | return defer.fail(failure.Failure()) |
|
554 | return defer.fail(failure.Failure()) | |
555 | return serials |
|
555 | return serials | |
556 | return packThemUp |
|
556 | return packThemUp | |
557 |
|
557 | |||
558 |
|
558 | |||
559 | def queue(methodToQueue): |
|
559 | def queue(methodToQueue): | |
560 | def queuedMethod(this, *args, **kwargs): |
|
560 | def queuedMethod(this, *args, **kwargs): | |
561 | name = methodToQueue.__name__ |
|
561 | name = methodToQueue.__name__ | |
562 | return this.submitCommand(Command(name, *args, **kwargs)) |
|
562 | return this.submitCommand(Command(name, *args, **kwargs)) | |
563 | return queuedMethod |
|
563 | return queuedMethod | |
564 |
|
564 | |||
565 | class QueuedEngine(object): |
|
565 | class QueuedEngine(object): | |
566 | """Adapt an IEngineBase to an IEngineQueued by wrapping it. |
|
566 | """Adapt an IEngineBase to an IEngineQueued by wrapping it. | |
567 |
|
567 | |||
568 | The resulting object will implement IEngineQueued which extends |
|
568 | The resulting object will implement IEngineQueued which extends | |
569 | IEngineCore which extends (IEngineBase, IEngineSerialized). |
|
569 | IEngineCore which extends (IEngineBase, IEngineSerialized). | |
570 |
|
570 | |||
571 | This seems like the best way of handling it, but I am not sure. The |
|
571 | This seems like the best way of handling it, but I am not sure. The | |
572 | other option is to have the various base interfaces be used like |
|
572 | other option is to have the various base interfaces be used like | |
573 | mix-in intefaces. The problem I have with this is adpatation is |
|
573 | mix-in intefaces. The problem I have with this is adpatation is | |
574 | more difficult and complicated because there can be can multiple |
|
574 | more difficult and complicated because there can be can multiple | |
575 | original and final Interfaces. |
|
575 | original and final Interfaces. | |
576 | """ |
|
576 | """ | |
577 |
|
577 | |||
578 | zi.implements(IEngineQueued) |
|
578 | zi.implements(IEngineQueued) | |
579 |
|
579 | |||
580 | def __init__(self, engine): |
|
580 | def __init__(self, engine): | |
581 | """Create a QueuedEngine object from an engine |
|
581 | """Create a QueuedEngine object from an engine | |
582 |
|
582 | |||
583 | engine: An implementor of IEngineCore and IEngineSerialized |
|
583 | engine: An implementor of IEngineCore and IEngineSerialized | |
584 | keepUpToDate: whether to update the remote status when the |
|
584 | keepUpToDate: whether to update the remote status when the | |
585 | queue is empty. Defaults to False. |
|
585 | queue is empty. Defaults to False. | |
586 | """ |
|
586 | """ | |
587 |
|
587 | |||
588 | # This is the right way to do these tests rather than |
|
588 | # This is the right way to do these tests rather than | |
589 | # IEngineCore in list(zi.providedBy(engine)) which will only |
|
589 | # IEngineCore in list(zi.providedBy(engine)) which will only | |
590 | # picks of the interfaces that are directly declared by engine. |
|
590 | # picks of the interfaces that are directly declared by engine. | |
591 | assert IEngineBase.providedBy(engine), \ |
|
591 | assert IEngineBase.providedBy(engine), \ | |
592 | "engine passed to QueuedEngine doesn't provide IEngineBase" |
|
592 | "engine passed to QueuedEngine doesn't provide IEngineBase" | |
593 |
|
593 | |||
594 | self.engine = engine |
|
594 | self.engine = engine | |
595 | self.id = engine.id |
|
595 | self.id = engine.id | |
596 | self.queued = [] |
|
596 | self.queued = [] | |
597 | self.history = {} |
|
597 | self.history = {} | |
598 | self.engineStatus = {} |
|
598 | self.engineStatus = {} | |
599 | self.currentCommand = None |
|
599 | self.currentCommand = None | |
600 | self.failureObservers = [] |
|
600 | self.failureObservers = [] | |
601 |
|
601 | |||
602 | def _get_properties(self): |
|
602 | def _get_properties(self): | |
603 | return self.engine.properties |
|
603 | return self.engine.properties | |
604 |
|
604 | |||
605 | properties = property(_get_properties, lambda self, _: None) |
|
605 | properties = property(_get_properties, lambda self, _: None) | |
606 | # Queue management methods. You should not call these directly |
|
606 | # Queue management methods. You should not call these directly | |
607 |
|
607 | |||
608 | def submitCommand(self, cmd): |
|
608 | def submitCommand(self, cmd): | |
609 | """Submit command to queue.""" |
|
609 | """Submit command to queue.""" | |
610 |
|
610 | |||
611 | d = defer.Deferred() |
|
611 | d = defer.Deferred() | |
612 | cmd.setDeferred(d) |
|
612 | cmd.setDeferred(d) | |
613 | if self.currentCommand is not None: |
|
613 | if self.currentCommand is not None: | |
614 | if self.currentCommand.finished: |
|
614 | if self.currentCommand.finished: | |
615 | # log.msg("Running command immediately: %r" % cmd) |
|
615 | # log.msg("Running command immediately: %r" % cmd) | |
616 | self.currentCommand = cmd |
|
616 | self.currentCommand = cmd | |
617 | self.runCurrentCommand() |
|
617 | self.runCurrentCommand() | |
618 | else: # command is still running |
|
618 | else: # command is still running | |
619 | # log.msg("Command is running: %r" % self.currentCommand) |
|
619 | # log.msg("Command is running: %r" % self.currentCommand) | |
620 | # log.msg("Queueing: %r" % cmd) |
|
620 | # log.msg("Queueing: %r" % cmd) | |
621 | self.queued.append(cmd) |
|
621 | self.queued.append(cmd) | |
622 | else: |
|
622 | else: | |
623 | # log.msg("No current commands, running: %r" % cmd) |
|
623 | # log.msg("No current commands, running: %r" % cmd) | |
624 | self.currentCommand = cmd |
|
624 | self.currentCommand = cmd | |
625 | self.runCurrentCommand() |
|
625 | self.runCurrentCommand() | |
626 | return d |
|
626 | return d | |
627 |
|
627 | |||
628 | def runCurrentCommand(self): |
|
628 | def runCurrentCommand(self): | |
629 | """Run current command.""" |
|
629 | """Run current command.""" | |
630 |
|
630 | |||
631 | cmd = self.currentCommand |
|
631 | cmd = self.currentCommand | |
632 | f = getattr(self.engine, cmd.remoteMethod, None) |
|
632 | f = getattr(self.engine, cmd.remoteMethod, None) | |
633 | if f: |
|
633 | if f: | |
634 | d = f(*cmd.args, **cmd.kwargs) |
|
634 | d = f(*cmd.args, **cmd.kwargs) | |
635 | if cmd.remoteMethod is 'execute': |
|
635 | if cmd.remoteMethod is 'execute': | |
636 | d.addCallback(self.saveResult) |
|
636 | d.addCallback(self.saveResult) | |
637 | d.addCallback(self.finishCommand) |
|
637 | d.addCallback(self.finishCommand) | |
638 | d.addErrback(self.abortCommand) |
|
638 | d.addErrback(self.abortCommand) | |
639 | else: |
|
639 | else: | |
640 | return defer.fail(AttributeError(cmd.remoteMethod)) |
|
640 | return defer.fail(AttributeError(cmd.remoteMethod)) | |
641 |
|
641 | |||
642 | def _flushQueue(self): |
|
642 | def _flushQueue(self): | |
643 | """Pop next command in queue and run it.""" |
|
643 | """Pop next command in queue and run it.""" | |
644 |
|
644 | |||
645 | if len(self.queued) > 0: |
|
645 | if len(self.queued) > 0: | |
646 | self.currentCommand = self.queued.pop(0) |
|
646 | self.currentCommand = self.queued.pop(0) | |
647 | self.runCurrentCommand() |
|
647 | self.runCurrentCommand() | |
648 |
|
648 | |||
649 | def saveResult(self, result): |
|
649 | def saveResult(self, result): | |
650 | """Put the result in the history.""" |
|
650 | """Put the result in the history.""" | |
651 | self.history[result['number']] = result |
|
651 | self.history[result['number']] = result | |
652 | return result |
|
652 | return result | |
653 |
|
653 | |||
654 | def finishCommand(self, result): |
|
654 | def finishCommand(self, result): | |
655 | """Finish currrent command.""" |
|
655 | """Finish currrent command.""" | |
656 |
|
656 | |||
657 | # The order of these commands is absolutely critical. |
|
657 | # The order of these commands is absolutely critical. | |
658 | self.currentCommand.handleResult(result) |
|
658 | self.currentCommand.handleResult(result) | |
659 | self.currentCommand.finished = True |
|
659 | self.currentCommand.finished = True | |
660 | self._flushQueue() |
|
660 | self._flushQueue() | |
661 | return result |
|
661 | return result | |
662 |
|
662 | |||
663 | def abortCommand(self, reason): |
|
663 | def abortCommand(self, reason): | |
664 | """Abort current command. |
|
664 | """Abort current command. | |
665 |
|
665 | |||
666 | This eats the Failure but first passes it onto the Deferred that the |
|
666 | This eats the Failure but first passes it onto the Deferred that the | |
667 | user has. |
|
667 | user has. | |
668 |
|
668 | |||
669 | It also clear out the queue so subsequence commands don't run. |
|
669 | It also clear out the queue so subsequence commands don't run. | |
670 | """ |
|
670 | """ | |
671 |
|
671 | |||
672 | # The order of these 3 commands is absolutely critical. The currentCommand |
|
672 | # The order of these 3 commands is absolutely critical. The currentCommand | |
673 | # must first be marked as finished BEFORE the queue is cleared and before |
|
673 | # must first be marked as finished BEFORE the queue is cleared and before | |
674 | # the current command is sent the failure. |
|
674 | # the current command is sent the failure. | |
675 | # Also, the queue must be cleared BEFORE the current command is sent the Failure |
|
675 | # Also, the queue must be cleared BEFORE the current command is sent the Failure | |
676 | # otherwise the errback chain could trigger new commands to be added to the |
|
676 | # otherwise the errback chain could trigger new commands to be added to the | |
677 | # queue before we clear it. We should clear ONLY the commands that were in |
|
677 | # queue before we clear it. We should clear ONLY the commands that were in | |
678 | # the queue when the error occured. |
|
678 | # the queue when the error occured. | |
679 | self.currentCommand.finished = True |
|
679 | self.currentCommand.finished = True | |
680 | s = "%r %r %r" % (self.currentCommand.remoteMethod, self.currentCommand.args, self.currentCommand.kwargs) |
|
680 | s = "%r %r %r" % (self.currentCommand.remoteMethod, self.currentCommand.args, self.currentCommand.kwargs) | |
681 | self.clear_queue(msg=s) |
|
681 | self.clear_queue(msg=s) | |
682 | self.currentCommand.handleError(reason) |
|
682 | self.currentCommand.handleError(reason) | |
683 |
|
683 | |||
684 | return None |
|
684 | return None | |
685 |
|
685 | |||
686 | #--------------------------------------------------------------------------- |
|
686 | #--------------------------------------------------------------------------- | |
687 | # IEngineCore methods |
|
687 | # IEngineCore methods | |
688 | #--------------------------------------------------------------------------- |
|
688 | #--------------------------------------------------------------------------- | |
689 |
|
689 | |||
690 | @queue |
|
690 | @queue | |
691 | def execute(self, lines): |
|
691 | def execute(self, lines): | |
692 | pass |
|
692 | pass | |
693 |
|
693 | |||
694 | @queue |
|
694 | @queue | |
695 | def push(self, namespace): |
|
695 | def push(self, namespace): | |
696 | pass |
|
696 | pass | |
697 |
|
697 | |||
698 | @queue |
|
698 | @queue | |
699 | def pull(self, keys): |
|
699 | def pull(self, keys): | |
700 | pass |
|
700 | pass | |
701 |
|
701 | |||
702 | @queue |
|
702 | @queue | |
703 | def push_function(self, namespace): |
|
703 | def push_function(self, namespace): | |
704 | pass |
|
704 | pass | |
705 |
|
705 | |||
706 | @queue |
|
706 | @queue | |
707 | def pull_function(self, keys): |
|
707 | def pull_function(self, keys): | |
708 | pass |
|
708 | pass | |
709 |
|
709 | |||
710 | def get_result(self, i=None): |
|
710 | def get_result(self, i=None): | |
711 | if i is None: |
|
711 | if i is None: | |
712 | i = max(self.history.keys()+[None]) |
|
712 | i = max(self.history.keys()+[None]) | |
713 |
|
713 | |||
714 | cmd = self.history.get(i, None) |
|
714 | cmd = self.history.get(i, None) | |
715 | # Uncomment this line to disable chaching of results |
|
715 | # Uncomment this line to disable chaching of results | |
716 | #cmd = None |
|
716 | #cmd = None | |
717 | if cmd is None: |
|
717 | if cmd is None: | |
718 | return self.submitCommand(Command('get_result', i)) |
|
718 | return self.submitCommand(Command('get_result', i)) | |
719 | else: |
|
719 | else: | |
720 | return defer.succeed(cmd) |
|
720 | return defer.succeed(cmd) | |
721 |
|
721 | |||
722 | def reset(self): |
|
722 | def reset(self): | |
723 | self.clear_queue() |
|
723 | self.clear_queue() | |
724 | self.history = {} # reset the cache - I am not sure we should do this |
|
724 | self.history = {} # reset the cache - I am not sure we should do this | |
725 | return self.submitCommand(Command('reset')) |
|
725 | return self.submitCommand(Command('reset')) | |
726 |
|
726 | |||
727 | def kill(self): |
|
727 | def kill(self): | |
728 | self.clear_queue() |
|
728 | self.clear_queue() | |
729 | return self.submitCommand(Command('kill')) |
|
729 | return self.submitCommand(Command('kill')) | |
730 |
|
730 | |||
731 | @queue |
|
731 | @queue | |
732 | def keys(self): |
|
732 | def keys(self): | |
733 | pass |
|
733 | pass | |
734 |
|
734 | |||
735 | #--------------------------------------------------------------------------- |
|
735 | #--------------------------------------------------------------------------- | |
736 | # IEngineSerialized methods |
|
736 | # IEngineSerialized methods | |
737 | #--------------------------------------------------------------------------- |
|
737 | #--------------------------------------------------------------------------- | |
738 |
|
738 | |||
739 | @queue |
|
739 | @queue | |
740 | def push_serialized(self, namespace): |
|
740 | def push_serialized(self, namespace): | |
741 | pass |
|
741 | pass | |
742 |
|
742 | |||
743 | @queue |
|
743 | @queue | |
744 | def pull_serialized(self, keys): |
|
744 | def pull_serialized(self, keys): | |
745 | pass |
|
745 | pass | |
746 |
|
746 | |||
747 | #--------------------------------------------------------------------------- |
|
747 | #--------------------------------------------------------------------------- | |
748 | # IEngineProperties methods |
|
748 | # IEngineProperties methods | |
749 | #--------------------------------------------------------------------------- |
|
749 | #--------------------------------------------------------------------------- | |
750 |
|
750 | |||
751 | @queue |
|
751 | @queue | |
752 | def set_properties(self, namespace): |
|
752 | def set_properties(self, namespace): | |
753 | pass |
|
753 | pass | |
754 |
|
754 | |||
755 | @queue |
|
755 | @queue | |
756 | def get_properties(self, keys=None): |
|
756 | def get_properties(self, keys=None): | |
757 | pass |
|
757 | pass | |
758 |
|
758 | |||
759 | @queue |
|
759 | @queue | |
760 | def del_properties(self, keys): |
|
760 | def del_properties(self, keys): | |
761 | pass |
|
761 | pass | |
762 |
|
762 | |||
763 | @queue |
|
763 | @queue | |
764 | def has_properties(self, keys): |
|
764 | def has_properties(self, keys): | |
765 | pass |
|
765 | pass | |
766 |
|
766 | |||
767 | @queue |
|
767 | @queue | |
768 | def clear_properties(self): |
|
768 | def clear_properties(self): | |
769 | pass |
|
769 | pass | |
770 |
|
770 | |||
771 | #--------------------------------------------------------------------------- |
|
771 | #--------------------------------------------------------------------------- | |
772 | # IQueuedEngine methods |
|
772 | # IQueuedEngine methods | |
773 | #--------------------------------------------------------------------------- |
|
773 | #--------------------------------------------------------------------------- | |
774 |
|
774 | |||
775 | def clear_queue(self, msg=''): |
|
775 | def clear_queue(self, msg=''): | |
776 | """Clear the queue, but doesn't cancel the currently running commmand.""" |
|
776 | """Clear the queue, but doesn't cancel the currently running commmand.""" | |
777 |
|
777 | |||
778 | for cmd in self.queued: |
|
778 | for cmd in self.queued: | |
779 | cmd.deferred.errback(failure.Failure(error.QueueCleared(msg))) |
|
779 | cmd.deferred.errback(failure.Failure(error.QueueCleared(msg))) | |
780 | self.queued = [] |
|
780 | self.queued = [] | |
781 | return defer.succeed(None) |
|
781 | return defer.succeed(None) | |
782 |
|
782 | |||
783 | def queue_status(self): |
|
783 | def queue_status(self): | |
784 | if self.currentCommand is not None: |
|
784 | if self.currentCommand is not None: | |
785 | if self.currentCommand.finished: |
|
785 | if self.currentCommand.finished: | |
786 | pending = repr(None) |
|
786 | pending = repr(None) | |
787 | else: |
|
787 | else: | |
788 | pending = repr(self.currentCommand) |
|
788 | pending = repr(self.currentCommand) | |
789 | else: |
|
789 | else: | |
790 | pending = repr(None) |
|
790 | pending = repr(None) | |
791 | dikt = {'queue':map(repr,self.queued), 'pending':pending} |
|
791 | dikt = {'queue':map(repr,self.queued), 'pending':pending} | |
792 | return defer.succeed(dikt) |
|
792 | return defer.succeed(dikt) | |
793 |
|
793 | |||
794 | def register_failure_observer(self, obs): |
|
794 | def register_failure_observer(self, obs): | |
795 | self.failureObservers.append(obs) |
|
795 | self.failureObservers.append(obs) | |
796 |
|
796 | |||
797 | def unregister_failure_observer(self, obs): |
|
797 | def unregister_failure_observer(self, obs): | |
798 | self.failureObservers.remove(obs) |
|
798 | self.failureObservers.remove(obs) | |
799 |
|
799 | |||
800 |
|
800 | |||
801 | # Now register QueuedEngine as an adpater class that makes an IEngineBase into a |
|
801 | # Now register QueuedEngine as an adpater class that makes an IEngineBase into a | |
802 | # IEngineQueued. |
|
802 | # IEngineQueued. | |
803 | components.registerAdapter(QueuedEngine, IEngineBase, IEngineQueued) |
|
803 | components.registerAdapter(QueuedEngine, IEngineBase, IEngineQueued) | |
804 |
|
804 | |||
805 |
|
805 | |||
806 | class Command(object): |
|
806 | class Command(object): | |
807 | """A command object that encapslates queued commands. |
|
807 | """A command object that encapslates queued commands. | |
808 |
|
808 | |||
809 | This class basically keeps track of a command that has been queued |
|
809 | This class basically keeps track of a command that has been queued | |
810 | in a QueuedEngine. It manages the deferreds and hold the method to be called |
|
810 | in a QueuedEngine. It manages the deferreds and hold the method to be called | |
811 | and the arguments to that method. |
|
811 | and the arguments to that method. | |
812 | """ |
|
812 | """ | |
813 |
|
813 | |||
814 |
|
814 | |||
815 | def __init__(self, remoteMethod, *args, **kwargs): |
|
815 | def __init__(self, remoteMethod, *args, **kwargs): | |
816 | """Build a new Command object.""" |
|
816 | """Build a new Command object.""" | |
817 |
|
817 | |||
818 | self.remoteMethod = remoteMethod |
|
818 | self.remoteMethod = remoteMethod | |
819 | self.args = args |
|
819 | self.args = args | |
820 | self.kwargs = kwargs |
|
820 | self.kwargs = kwargs | |
821 | self.finished = False |
|
821 | self.finished = False | |
822 |
|
822 | |||
823 | def setDeferred(self, d): |
|
823 | def setDeferred(self, d): | |
824 | """Sets the deferred attribute of the Command.""" |
|
824 | """Sets the deferred attribute of the Command.""" | |
825 |
|
825 | |||
826 | self.deferred = d |
|
826 | self.deferred = d | |
827 |
|
827 | |||
828 | def __repr__(self): |
|
828 | def __repr__(self): | |
829 | if not self.args: |
|
829 | if not self.args: | |
830 | args = '' |
|
830 | args = '' | |
831 | else: |
|
831 | else: | |
832 | args = str(self.args)[1:-2] #cut off (...,) |
|
832 | args = str(self.args)[1:-2] #cut off (...,) | |
833 | for k,v in self.kwargs.iteritems(): |
|
833 | for k,v in self.kwargs.iteritems(): | |
834 | if args: |
|
834 | if args: | |
835 | args += ', ' |
|
835 | args += ', ' | |
836 | args += '%s=%r' %(k,v) |
|
836 | args += '%s=%r' %(k,v) | |
837 | return "%s(%s)" %(self.remoteMethod, args) |
|
837 | return "%s(%s)" %(self.remoteMethod, args) | |
838 |
|
838 | |||
839 | def handleResult(self, result): |
|
839 | def handleResult(self, result): | |
840 | """When the result is ready, relay it to self.deferred.""" |
|
840 | """When the result is ready, relay it to self.deferred.""" | |
841 |
|
841 | |||
842 | self.deferred.callback(result) |
|
842 | self.deferred.callback(result) | |
843 |
|
843 | |||
844 | def handleError(self, reason): |
|
844 | def handleError(self, reason): | |
845 | """When an error has occured, relay it to self.deferred.""" |
|
845 | """When an error has occured, relay it to self.deferred.""" | |
846 |
|
846 | |||
847 | self.deferred.errback(reason) |
|
847 | self.deferred.errback(reason) | |
848 |
|
848 | |||
849 | class ThreadedEngineService(EngineService): |
|
849 | class ThreadedEngineService(EngineService): | |
|
850 | """An EngineService subclass that defers execute commands to a separate | |||
|
851 | thread. | |||
|
852 | ||||
|
853 | ThreadedEngineService uses twisted.internet.threads.deferToThread to | |||
|
854 | defer execute requests to a separate thread. GUI frontends may want to | |||
|
855 | use ThreadedEngineService as the engine in an | |||
|
856 | IPython.frontend.frontendbase.FrontEndBase subclass to prevent | |||
|
857 | block execution from blocking the GUI thread. | |||
|
858 | """ | |||
850 |
|
859 | |||
851 | zi.implements(IEngineBase) |
|
860 | zi.implements(IEngineBase) | |
852 |
|
861 | |||
853 | def __init__(self, shellClass=Interpreter, mpi=None): |
|
862 | def __init__(self, shellClass=Interpreter, mpi=None): | |
854 | EngineService.__init__(self, shellClass, mpi) |
|
863 | EngineService.__init__(self, shellClass, mpi) | |
|
864 | ||||
|
865 | ||||
|
866 | def execute(self, lines): | |||
855 | # Only import this if we are going to use this class |
|
867 | # Only import this if we are going to use this class | |
856 | from twisted.internet import threads |
|
868 | from twisted.internet import threads | |
857 |
|
869 | |||
858 | def execute(self, lines): |
|
870 | msg = {'engineid':self.id, | |
859 | msg = """engine: %r |
|
871 | 'method':'execute', | |
860 | method: execute(lines) |
|
872 | 'args':[lines]} | |
861 | lines = %s""" % (self.id, lines) |
|
873 | ||
862 |
d = threads.deferToThread(self. |
|
874 | d = threads.deferToThread(self.shell.execute, lines) | |
863 | d.addCallback(self.addIDToResult) |
|
875 | d.addCallback(self.addIDToResult) | |
864 | return d |
|
876 | return d |
@@ -1,66 +1,78 b'' | |||||
1 | # encoding: utf-8 |
|
1 | # encoding: utf-8 | |
2 |
|
2 | |||
3 | """This file contains unittests for the kernel.engineservice.py module. |
|
3 | """This file contains unittests for the kernel.engineservice.py module. | |
4 |
|
4 | |||
5 | Things that should be tested: |
|
5 | Things that should be tested: | |
6 |
|
6 | |||
7 | - Should the EngineService return Deferred objects? |
|
7 | - Should the EngineService return Deferred objects? | |
8 | - Run the same tests that are run in shell.py. |
|
8 | - Run the same tests that are run in shell.py. | |
9 | - Make sure that the Interface is really implemented. |
|
9 | - Make sure that the Interface is really implemented. | |
10 | - The startService and stopService methods. |
|
10 | - The startService and stopService methods. | |
11 | """ |
|
11 | """ | |
12 |
|
12 | |||
13 | __docformat__ = "restructuredtext en" |
|
13 | __docformat__ = "restructuredtext en" | |
14 |
|
14 | |||
15 | #------------------------------------------------------------------------------- |
|
15 | #------------------------------------------------------------------------------- | |
16 | # Copyright (C) 2008 The IPython Development Team |
|
16 | # Copyright (C) 2008 The IPython Development Team | |
17 | # |
|
17 | # | |
18 | # Distributed under the terms of the BSD License. The full license is in |
|
18 | # Distributed under the terms of the BSD License. The full license is in | |
19 | # the file COPYING, distributed as part of this software. |
|
19 | # the file COPYING, distributed as part of this software. | |
20 | #------------------------------------------------------------------------------- |
|
20 | #------------------------------------------------------------------------------- | |
21 |
|
21 | |||
22 | #------------------------------------------------------------------------------- |
|
22 | #------------------------------------------------------------------------------- | |
23 | # Imports |
|
23 | # Imports | |
24 | #------------------------------------------------------------------------------- |
|
24 | #------------------------------------------------------------------------------- | |
25 |
|
25 | |||
26 | try: |
|
26 | try: | |
27 | from twisted.internet import defer |
|
27 | from twisted.internet import defer | |
28 | from twisted.application.service import IService |
|
28 | from twisted.application.service import IService | |
29 |
|
29 | |||
30 | from IPython.kernel import engineservice as es |
|
30 | from IPython.kernel import engineservice as es | |
31 | from IPython.testing.util import DeferredTestCase |
|
31 | from IPython.testing.util import DeferredTestCase | |
32 | from IPython.kernel.tests.engineservicetest import \ |
|
32 | from IPython.kernel.tests.engineservicetest import \ | |
33 | IEngineCoreTestCase, \ |
|
33 | IEngineCoreTestCase, \ | |
34 | IEngineSerializedTestCase, \ |
|
34 | IEngineSerializedTestCase, \ | |
35 | IEngineQueuedTestCase, \ |
|
35 | IEngineQueuedTestCase, \ | |
36 | IEnginePropertiesTestCase |
|
36 | IEnginePropertiesTestCase | |
37 | except ImportError: |
|
37 | except ImportError: | |
38 | pass |
|
38 | pass | |
39 | else: |
|
39 | else: | |
40 | class BasicEngineServiceTest(DeferredTestCase, |
|
40 | class BasicEngineServiceTest(DeferredTestCase, | |
41 | IEngineCoreTestCase, |
|
41 | IEngineCoreTestCase, | |
42 | IEngineSerializedTestCase, |
|
42 | IEngineSerializedTestCase, | |
43 | IEnginePropertiesTestCase): |
|
43 | IEnginePropertiesTestCase): | |
44 |
|
44 | |||
45 | def setUp(self): |
|
45 | def setUp(self): | |
46 | self.engine = es.EngineService() |
|
46 | self.engine = es.EngineService() | |
47 | self.engine.startService() |
|
47 | self.engine.startService() | |
48 |
|
48 | |||
49 | def tearDown(self): |
|
49 | def tearDown(self): | |
50 | return self.engine.stopService() |
|
50 | return self.engine.stopService() | |
|
51 | ||||
|
52 | class ThreadedEngineServiceTest(DeferredTestCase, | |||
|
53 | IEngineCoreTestCase, | |||
|
54 | IEngineSerializedTestCase, | |||
|
55 | IEnginePropertiesTestCase): | |||
|
56 | ||||
|
57 | def setUp(self): | |||
|
58 | self.engine = es.ThreadedEngineService() | |||
|
59 | self.engine.startService() | |||
|
60 | ||||
|
61 | def tearDown(self): | |||
|
62 | return self.engine.stopService() | |||
51 |
|
63 | |||
52 | class QueuedEngineServiceTest(DeferredTestCase, |
|
64 | class QueuedEngineServiceTest(DeferredTestCase, | |
53 | IEngineCoreTestCase, |
|
65 | IEngineCoreTestCase, | |
54 | IEngineSerializedTestCase, |
|
66 | IEngineSerializedTestCase, | |
55 | IEnginePropertiesTestCase, |
|
67 | IEnginePropertiesTestCase, | |
56 | IEngineQueuedTestCase): |
|
68 | IEngineQueuedTestCase): | |
57 |
|
69 | |||
58 | def setUp(self): |
|
70 | def setUp(self): | |
59 | self.rawEngine = es.EngineService() |
|
71 | self.rawEngine = es.EngineService() | |
60 | self.rawEngine.startService() |
|
72 | self.rawEngine.startService() | |
61 | self.engine = es.IEngineQueued(self.rawEngine) |
|
73 | self.engine = es.IEngineQueued(self.rawEngine) | |
62 |
|
74 | |||
63 | def tearDown(self): |
|
75 | def tearDown(self): | |
64 | return self.rawEngine.stopService() |
|
76 | return self.rawEngine.stopService() | |
65 |
|
77 | |||
66 |
|
78 |
General Comments 0
You need to be logged in to leave comments.
Login now