summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvery Pennarun <apenwarr@gmail.com>2011-01-22 16:49:19 -0800
committerAvery Pennarun <apenwarr@gmail.com>2011-01-22 16:49:21 -0800
commit668441adb68d015e6ad452651756b3bee7d44383 (patch)
tree3a582615d9aa056892d1fa2ad516e1bceccdfbf2
parent415be935d4e2ba5cfbcf245a3e5d6ffcaeddbfd6 (diff)
parentd4ccd30c24b717113f1e94c440c0b60cff14f63d (diff)
Merge branch 'macapp'sshuttle-0.45
A cute little GUI for sshuttle on MacOS, written using pyobjc. * macapp: ui-macos: call the main binary MacOS/Sshuttle. ui-macos/git-export.do: write the generated app to a branch. ui-macos/default.app.do: get rid of some duplicated files. ui-macos: Actually prompt for passwords instead of assuming a default. ui-macos: Don't enable connecting for hosts with Custom but zero subnets. ui-macos: Smoother log messages in the log window. ui-macos: Notice when we've connected; make debug logs optional. ui-macos: Much better connection status reporting. ui-macos/run.do: a shortcut for running debug.app. ui-macos/*: "a series of unfortunate events."
-rw-r--r--client.py2
-rw-r--r--ui-macos/.gitignore8
-rw-r--r--ui-macos/Info.plist40
-rw-r--r--ui-macos/MainMenu.xib2340
-rw-r--r--ui-macos/UserDefaults.plist10
-rw-r--r--ui-macos/all.do1
-rw-r--r--ui-macos/app.icnsbin0 -> 110343 bytes
-rw-r--r--ui-macos/askpass.py28
-rw-r--r--ui-macos/bits/.gitignore1
-rw-r--r--ui-macos/bits/PkgInfo1
-rw-r--r--ui-macos/bits/runpython.c23
-rw-r--r--ui-macos/bits/runpython.do5
-rw-r--r--ui-macos/chicken-tiny-bw.pngbin0 -> 821 bytes
-rw-r--r--ui-macos/chicken-tiny-err.pngbin0 -> 789 bytes
-rw-r--r--ui-macos/chicken-tiny.pngbin0 -> 810 bytes
-rw-r--r--ui-macos/clean.do4
-rw-r--r--ui-macos/debug.app.do15
-rw-r--r--ui-macos/default.app.do28
-rw-r--r--ui-macos/default.app.tar.gz.do5
-rw-r--r--ui-macos/default.app.zip.do5
-rw-r--r--ui-macos/default.nib.do2
-rw-r--r--ui-macos/dist.do1
-rw-r--r--ui-macos/git-export.do19
-rw-r--r--ui-macos/main.py352
-rw-r--r--ui-macos/models.py131
-rw-r--r--ui-macos/my.py62
-rw-r--r--ui-macos/run.do3
-rw-r--r--ui-macos/sources.list.do14
l---------ui-macos/sshuttle1
-rw-r--r--ui-macos/stupid.py14
30 files changed, 3115 insertions, 0 deletions
diff --git a/client.py b/client.py
index daa1e6a..dbd11de 100644
--- a/client.py
+++ b/client.py
@@ -226,6 +226,8 @@ def _main(listener, fw, ssh_cmd, remotename, python, seed_hosts, auto_nets,
raise Fatal('expected server init string %r; got %r'
% (expected, initstring))
debug1('connected.\n')
+ print 'Connected.'
+ sys.stdout.flush()
if daemon:
daemonize()
log('daemonizing (%s).\n' % _pidname)
diff --git a/ui-macos/.gitignore b/ui-macos/.gitignore
new file mode 100644
index 0000000..1daa15a
--- /dev/null
+++ b/ui-macos/.gitignore
@@ -0,0 +1,8 @@
+*.pyc
+*~
+/*.nib
+/debug.app
+/sources.list
+/Sshuttle VPN.app
+/*.tar.gz
+/*.zip
diff --git a/ui-macos/Info.plist b/ui-macos/Info.plist
new file mode 100644
index 0000000..b495531
--- /dev/null
+++ b/ui-macos/Info.plist
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDisplayName</key>
+ <string>Sshuttle VPN</string>
+ <key>CFBundleExecutable</key>
+ <string>Sshuttle</string>
+ <key>CFBundleIconFile</key>
+ <string>app.icns</string>
+ <key>CFBundleIdentifier</key>
+ <string>ca.apenwarr.Sshuttle</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Sshuttle VPN</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>0.0.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>0.0.0</string>
+ <key>LSUIElement</key>
+ <string>1</string>
+ <key>LSHasLocalizedDisplayName</key>
+ <false/>
+ <key>NSAppleScriptEnabled</key>
+ <false/>
+ <key>NSHumanReadableCopyright</key>
+ <string>GNU LGPL Version 2</string>
+ <key>NSMainNibFile</key>
+ <string>MainMenu</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/ui-macos/MainMenu.xib b/ui-macos/MainMenu.xib
new file mode 100644
index 0000000..5ba7fa5
--- /dev/null
+++ b/ui-macos/MainMenu.xib
@@ -0,0 +1,2340 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1060</int>
+ <string key="IBDocument.SystemVersion">10H574</string>
+ <string key="IBDocument.InterfaceBuilderVersion">762</string>
+ <string key="IBDocument.AppKitVersion">1038.35</string>
+ <string key="IBDocument.HIToolboxVersion">461.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">762</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="233"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="791197609">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="560370216">
+ <object class="NSMutableString" key="NSClassName">
+ <characters key="NS.bytes">NSApplication</characters>
+ </object>
+ </object>
+ <object class="NSCustomObject" id="248128462">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="318179970">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="411825121">
+ <int key="NSWindowStyleMask">3</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{157, 116}, {611, 369}}</string>
+ <int key="NSWTFlags">1886913536</int>
+ <string key="NSWindowTitle">Sshuttle VPN Preferences</string>
+ <string key="NSWindowClass">NSWindow</string>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+ <string key="NSWindowContentMinSize">{213, 107}</string>
+ <object class="NSView" key="NSWindowView" id="174067038">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTabView" id="389252804">
+ <reference key="NSNextResponder" ref="174067038"/>
+ <int key="NSvFlags">12</int>
+ <string key="NSFrame">{{-8, -10}, {627, 373}}</string>
+ <reference key="NSSuperview" ref="174067038"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <object class="NSMutableArray" key="NSTabViewItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTabViewItem" id="762265164">
+ <string key="NSIdentifier">1</string>
+ <object class="NSView" key="NSView" id="60314308">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSButton" id="26015719">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{17, 17}, {25, 23}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="705866460">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="696441443">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="26015719"/>
+ <int key="NSButtonFlags">-2033958657</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSCustomResource" key="NSNormalImage" id="771523361">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSAddTemplate</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSButton" id="244571541">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{41, 17}, {25, 23}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="375303129">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="244571541"/>
+ <int key="NSButtonFlags">-2033958657</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSCustomResource" key="NSNormalImage" id="58765799">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSRemoveTemplate</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSScrollView" id="776974664">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="8658574">
+ <reference key="NSNextResponder" ref="776974664"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableView" id="849333466">
+ <reference key="NSNextResponder" ref="8658574"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{224, 282}</string>
+ <reference key="NSSuperview" ref="8658574"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="_NSCornerView" key="NSCornerView">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{224, 0}, {16, 17}}</string>
+ </object>
+ <object class="NSMutableArray" key="NSTableColumns">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableColumn" id="401421410">
+ <double key="NSWidth">22</double>
+ <double key="NSMinWidth">10</double>
+ <double key="NSMaxWidth">3.4028234663852886e+38</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Connect</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerColor</string>
+ <object class="NSColor" key="NSColor" id="194624281">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="426726181">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerTextColor</string>
+ <object class="NSColor" key="NSColor" id="1024095115">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ <object class="NSButtonCell" key="NSDataCell" id="43761576">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Check</string>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="849333466"/>
+ <int key="NSButtonFlags">1215582719</int>
+ <int key="NSButtonFlags2">2</int>
+ <object class="NSCustomResource" key="NSNormalImage" id="581816235">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage" id="753862261">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="849333466"/>
+ </object>
+ <object class="NSTableColumn" id="807059746">
+ <double key="NSWidth">196</double>
+ <double key="NSMinWidth">40</double>
+ <double key="NSMaxWidth">1000</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Server</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+ </object>
+ <reference key="NSTextColor" ref="426726181"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="265833240">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272631808</int>
+ <string key="NSContents">Text</string>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="849333466"/>
+ <object class="NSColor" key="NSBackgroundColor" id="965844506">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor" id="216642103">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="399750419">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <reference key="NSColor" ref="1024095115"/>
+ </object>
+ </object>
+ <int key="NSResizingMask">1</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <reference key="NSTableView" ref="849333466"/>
+ </object>
+ </object>
+ <double key="NSIntercellSpacingWidth">3</double>
+ <double key="NSIntercellSpacingHeight">2</double>
+ <object class="NSColor" key="NSBackgroundColor" id="208404999">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlBackgroundColor</string>
+ <reference key="NSColor" ref="216642103"/>
+ </object>
+ <object class="NSColor" key="NSGridColor" id="582942050">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">gridColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41AA</bytes>
+ </object>
+ </object>
+ <double key="NSRowHeight">19</double>
+ <int key="NSTvFlags">48234496</int>
+ <reference key="NSDelegate"/>
+ <reference key="NSDataSource"/>
+ <int key="NSColumnAutoresizingStyle">0</int>
+ <int key="NSDraggingSourceMaskForLocal">15</int>
+ <int key="NSDraggingSourceMaskForNonLocal">0</int>
+ <bool key="NSAllowsTypeSelect">YES</bool>
+ <int key="NSTableViewDraggingDestinationStyle">0</int>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {223, 282}}</string>
+ <reference key="NSSuperview" ref="776974664"/>
+ <reference key="NSNextKeyView" ref="849333466"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <reference key="NSDocView" ref="849333466"/>
+ <reference key="NSBGColor" ref="208404999"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="368900999">
+ <reference key="NSNextResponder" ref="776974664"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{143, 1}, {15, 274}}</string>
+ <reference key="NSSuperview" ref="776974664"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <reference key="NSTarget" ref="776974664"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">0.99636363636363634</double>
+ </object>
+ <object class="NSScroller" id="628044564">
+ <reference key="NSNextResponder" ref="776974664"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{-100, -100}, {157, 15}}</string>
+ <reference key="NSSuperview" ref="776974664"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <int key="NSsFlags">1</int>
+ <reference key="NSTarget" ref="776974664"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">0.91812865497076024</double>
+ </object>
+ </object>
+ <string key="NSFrame">{{17, 40}, {225, 284}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <reference key="NSNextKeyView" ref="8658574"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <int key="NSsFlags">658</int>
+ <reference key="NSVScroller" ref="368900999"/>
+ <reference key="NSHScroller" ref="628044564"/>
+ <reference key="NSContentView" ref="8658574"/>
+ <bytes key="NSScrollAmts">QSAAAEEgAABBqAAAQagAAA</bytes>
+ </object>
+ <object class="NSButton" id="538356055">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{296, 254}, {273, 18}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="1001873806">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Automatically detect remote hostnames</string>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="538356055"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="581816235"/>
+ <reference key="NSAlternateImage" ref="753862261"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="889877302">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{341, 292}, {249, 22}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="950437001">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">272630848</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="889877302"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <reference key="NSColor" ref="194624281"/>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="1024095115"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSPopUpButton" id="801412726">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{273, 185}, {320, 26}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSPopUpButtonCell" key="NSCell" id="616730825">
+ <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags2">2048</int>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="801412726"/>
+ <int key="NSButtonFlags">112869631</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ <object class="NSMenuItem" key="NSMenuItem" id="934801323">
+ <reference key="NSMenu" ref="77791491"/>
+ <string key="NSTitle">Choose one</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <int key="NSState">1</int>
+ <object class="NSCustomResource" key="NSOnImage" id="615977438">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="445532764">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="616730825"/>
+ </object>
+ <bool key="NSMenuItemRespectAlignment">YES</bool>
+ <object class="NSMenu" key="NSMenu" id="77791491">
+ <string key="NSTitle">OtherViews</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="934801323"/>
+ <object class="NSMenuItem" id="913656186">
+ <reference key="NSMenu" ref="77791491"/>
+ <string key="NSTitle">Item 2</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="615977438"/>
+ <reference key="NSMixedImage" ref="445532764"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="616730825"/>
+ </object>
+ <object class="NSMenuItem" id="818007285">
+ <reference key="NSMenu" ref="77791491"/>
+ <string key="NSTitle">Item 3</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="615977438"/>
+ <reference key="NSMixedImage" ref="445532764"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="616730825"/>
+ </object>
+ </object>
+ <reference key="NSMenuFont" ref="696441443"/>
+ </object>
+ <int key="NSPreferredEdge">1</int>
+ <bool key="NSUsesItemFromMenu">YES</bool>
+ <bool key="NSAltersState">YES</bool>
+ <int key="NSArrowPosition">2</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="753545988">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{261, 294}, {75, 17}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="991446677">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">SSH Server:</string>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="753545988"/>
+ <reference key="NSBackgroundColor" ref="965844506"/>
+ <reference key="NSTextColor" ref="399750419"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="840157770">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{261, 217}, {105, 17}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="360994287">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Network routes:</string>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="840157770"/>
+ <reference key="NSBackgroundColor" ref="965844506"/>
+ <reference key="NSTextColor" ref="399750419"/>
+ </object>
+ </object>
+ <object class="NSButton" id="962924480">
+ <reference key="NSNextResponder" ref="60314308"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{276, 40}, {25, 23}}</string>
+ <reference key="NSSuperview" ref="60314308"/>
+ <int key="NSViewLayerContentsRedrawPolicy">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="105097654">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="696441443"/>
+ <reference key="NSControlView" ref="962924480"/>
+ <int key="NSBu